以下は「test.txt」のサンプルです。
abcdX1yad45das
abcdX2fad45das
abcdX3had45das
abcdX4wad45das
abcdX5mad45das
望ましい出力の例:
X1yad
X2fad
X3had
X4wad
X5mad
vimで動作させることができます。
:% s/\v.*(X\d)(.*)45.*/\1\2/
Perlで作業しました。
open(my $file, "<", "test.txt");
while(<$file>)
{
s/.*(X\d)(.*)45.*/$1$2/;
print $_;
}
私の最終正規表現には2つのグループ化が必要ですが、この出力例では必要ありません。
sedで動作させることはできません。
sed -r 's/.*(X\d)(.*)45.*/\1\2/' test.txt
abcdX1yad45das
abcdX2fad45das
abcdX3had45das
abcdX4wad45das
abcdX5mad45das
sed が正常に動作していることを確認するには、
sed -r 's/(a)/#\1#/' test.txt
#a#bcdX1yad45das
#a#bcdX2fad45das
#a#bcdX3had45das
#a#bcdX4wad45das
#a#bcdX5mad45das
私はsedで何が間違っているのですか?
答え1
sed
わからない\d
。代わりに、または[0-9]
をより一般的に使用できます。[[:digit:]]
$ sed -r 's/.*(X[[:digit:]])(.*)45.*/\1\2/' test.txt
X1yad
X2fad
X3had
X4wad
X5mad
Unicodeは[[:digit:]]
安全ですが、そうでは[0-9]
ありません。
答え2
sed 's/abcd\(X[0-9][a-z]ad\)45das/\1/g' your_file_name
それは行わなければなりません。
答え3
あなたはsed
この特定の順序を理解していません\d
。または文字クラス\d
に置き換えます。[0-9]
[:digit:]
$ cat file.txt
abcdX1yad45das
abcdX2fad45das
abcdX3had45das
abcdX4wad45das
abcdX5mad45das
$ sed -nr 's/.*(X\d)(.*)45.*/\1\2/p' file.txt
$ sed -nr 's/.*(X[0-9])(.*)45.*/\1\2/p' file.txt
X1yad
X2fad
X3had
X4wad
X5mad