이런 내용의 파일이 있습니다.
hello , welcome
name is $foo$
bye bye
이렇게 $foo$
교체 하고 싶습니다 .bar
hello , welcome
name is bar
bye bye
그림과 같이 주변의 달러 기호도 제거하고 싶습니다.
나는 다음과 같은 것을 시도해 왔습니다.
sed -i 's/$.*$/$foo$/g’
답변1
그 사이의 모든 항목과 $
그 이후의 다음 항목을 바꾸려면 다음을 수행할 수 있습니다.$
bar
sed 's/\$[^$]*\$/bar/g' < file
$
주제의 끝과 일치하는 특수 정규식 연산자입니다. 리터럴 문자를 일치시키려면 대신 또는를 $
사용해야 합니다 .\$
[$]
s를 명시적으로 바꾸십시오 $token$
:
sed '
s/\$foo\$/bar/g
s/\$abc\$/xyz/g
' < file
perl
큰 목록의 경우 다음을 수행하는 것이 좋습니다 .
perl -p -e '
BEGIN {
%map = qw(
$foo$ bar
$abc$ xyz
$xyz$ abc
);
$regexp = join "|", map {qr{\Q$_\E}} keys %map;
}
s/$regexp/$map{$&}/g' < file
엄밀히 말하면 기본 정규식( 의 기본 정규식; 일부 구현에서는 sed
일부 , , , , ...을 사용하여 다른 스타일로 전환)의 경우 패턴 끝이나 a 앞(더 많은 경우)에만 적용됩니다. 많은)은 BRE의 특별 지원 확장입니다. 따라서 위에서는 마지막 항목만 탈출하면 됩니다. 그래도 꼭 필요하지 않을 때 탈출해도 아무런 해가 없고, 특수한 경우를 기억하는 것보다 쉽습니다.-E
-r
-R
-P
-X
-A
$
\)
$