다음과 같은 입력 파일이 있습니다.
1
30
35
90 ...
내가 하고 싶은 것은 다음과 같이 표시되도록 수정하는 것입니다.
sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify
Linux에서 이 작업을 어떻게 수행할 수 있는지 아시나요?
답변1
lines.list
줄 번호가 포함된 파일이 있고 나열된 각 줄에서 sed
실행되는 편집 스크립트를 만들고 싶다고 가정해 보겠습니다 .s///g
sed 's:$:s///g:' lines.list
질문에 표시된 4개의 숫자가 포함된 파일이 주어지면 sed
스크립트가 생성됩니다.
1s///g
30s///g
35s///g
90s///g
s///g
각 줄의 끝에 추가하면 됩니다. 슬래시 이스케이프를 방지하기 위해 s
스크립트의 명령은 :
대체 구분 기호로 사용됩니다.
이 스크립트를 실행하려면 다음을 사용해야 합니다 sed -f
.
sed 's:$:s///g:' lines.list | sed -i -f /dev/stdin file_to_modify
그러면 이전에 표시된 대로 스크립트가 생성된 다음 ) sed
이라는 항목에 적용됩니다 file_to_modify
.-i
sed
sed
하지만 스크립트 자체를 편집하는 것은 별 의미가 없다는 점을 참고하세요. 바꾸기 명령이 포함된 빈 정규식은 가장 최근에 일치하는 정규식을 재사용합니다. 스크립트에 그러한 표현식이 없으므로 첫 번째 s
명령이 실행됩니다 sed
.
답변2
내가 뭘 할까?
sed -E "s:[0-9]+:sed -i '&s///g' file_to_modify:" file
산출
sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify
sed -i '35s///g' file_to_modify
sed -i '90s///g' file_to_modif
또는 단일 통화로 결합
sed -E 's:[0-9]+:&s///g:' file |
paste -sd ';' |
sed "s:.*:sed -i '&' file_to_modify:"
sed -i '1s///g;30s///g;35s///g;90s///g' file_to_modify