기본적으로 다음과 같은 줄이 있습니다.
ILU1910\ilu0001 “ My hand is broken , ” said the sailor , “ and smoked the pipe . ”
ILU1910\ilu0001 “ It is going make life harder for us , ” he said .
나는 그들이 다음과 같이 보이기를 원합니다 :
<ignore>ILU1910\ilu0001</ignore> “ My hand is broken , ” said the sailor , “ and smoked the pipe . ”
<ignore>ILU1910\ilu0001</ignore> “ It is going make life harder for us , ” he said .
<ignore>
기본적으로 각 줄의 시작 부분에 ILU1910/ilu0001이 있고 해당 문구의 시작과 끝 부분에 추가 하고 싶습니다 </ignore>
.
다음 명령을 사용하여 작동시키려고 했습니다.
cat file.txt | sed 's/^\([^A-Za-z0-9]\+ \)/<ignore>\1<\/ignore>/g'
그러나 이것은 작동하지 않는 것 같습니다. 저는 MacBook에서 터미널을 사용하고 있습니다.
답변1
사용은 쉽게 할 수 있습니다 sed
.
sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/' file.txt
일치시킬 패턴이 하나뿐이므로 를 사용하면 더 쉽게 일치시킬 수 있습니다 &
. 당신이 사용하고 싶다면 cat
그것은
cat file.txt | sed 's/ILU1910\\ilu0001/<ignore>&<\/ignore>/'
귀하의 시도에서 영숫자가 아닌 모든 것을 다루고 있습니다 [^A-Za-z0-9]
. [^ ]*
다음을 사용하여 공백이 아닌 패턴으로 패턴을 수정할 수 있습니다 .
sed 's/^[^ ]*/<ignore>&<\/ignore>/' file.txt
답변2
파일을 제자리에서 편집하려는 경우 다음 스크립트를 사용하여 변경 사항을 작성할 수 있습니다 ed
.
ed -s file.txt <<< $'1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,\nw\nq'
이는 자동 모드 ed
에서 호출되며 -s
따옴표로 묶인 문자열로 명령어 목록을 보냅니다.
1,$s,ILU1910\\\\ilu0001,<ignore>ILU1910\\\\ilu0001</ignore>,
- 각 줄( )에서 첫 번째 부분을 검색1,$
하고 ( )를 두 번째 부분으로 바꿉니다.s, ... , ... ,
대체 텍스트에 슬래시가 있으므로 검색 또는 대체 텍스트에는 쉼표가 없으므로/
일반 구분 기호를 쉼표( )로 변경했습니다 .,
백슬래시는 쉘에 의해 인용되고 해석되므로ed
두 번 두 배로 늘려야 하며, 이것이\
1이 4가 되는 방식 입니다\\\\
.w
- 파일을 디스크에 다시 쓰기q
- 편집 종료