다음은 "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 $_;
}
내 최종 정규식에는 두 개의 그룹화가 필요하지만 이 예제 출력에서는 필요하지 않습니다.
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
유니코드 는 [[: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