읽고 검색했지만 무엇이 문제인지 이해하지 못합니다. 공백, 문자열 00011 및 공백 또는 새 줄을 일치시키고 싶습니다.
sed 's:\(\s\)\(00011\)\([\s\n]\):\1$03\3:g'
편집: 데이터는 다음과 같습니다.
ADD 00000 00001 00011
LSH 00011 00100 01111
ADD 00011 10100 00010
JSR 00011101000111010101100010
그리고 $03
교체할 문자열만 있으면 됩니다.00011
나는 다음과 같은 결과를 얻고 싶습니다 :
ADD 00000 00001 $03
LSH $03 00100 01111
ADD $03 10100 00010
JSR 00011101000111010101100010
감사해요
답변1
sed는 한 번에 한 줄씩 처리하며, 각 줄을 처리할 때 개행 문자를 제거합니다.
$
따라서 원하는 작업을 수행하려면 리터럴 줄 바꿈 대신 줄 끝 앵커( )를 일치시켜야 합니다 .
이것은 작동합니다:
sed 's:\(\s\)\(00011\)\(\s\|$\):\1$03\3:g'
답변2
$ sed 's/\<00011\>/$03/g' file
ADD 00000 00001 $03
LSH $03 00100 01111
ADD $03 10100 00010
JSR 00011101000111010101100010
단어의 시작과 끝에서 너비가 0인 단어 경계를 \<
각각 일치 시킵니다 . \>
BSD는 또한 GNU가 단어 경계로 이해하는 및 를 인식 sed
합니다 .[[:<:]]
[[:>:]]
sed
\b
sed
입력 데이터에는 개행 문자가 표시되지 않습니다. 또한 \s
이는 GNU에만 적용됩니다 sed
. 기준에서 공백 문자를 일치시키려면 sed
리터럴 공백을 사용하십시오(공백이나 탭 문자를 일치시키려면 를 사용하십시오 [[:blank:]]
).