각 줄의 특정 문구에 태그 추가

각 줄의 특정 문구에 태그 추가

기본적으로 다음과 같은 줄이 있습니다.

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- 편집 종료

관련 정보