sed에서 공백이나 개행 문자 일치

sed에서 공백이나 개행 문자 일치

읽고 검색했지만 무엇이 문제인지 이해하지 못합니다. 공백, 문자열 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:]]).

관련 정보