파일의 숫자를 사용하여 sed 명령 생성

파일의 숫자를 사용하여 sed 명령 생성

다음과 같은 입력 파일이 있습니다.

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.-isedsed

하지만 스크립트 자체를 편집하는 것은 별 의미가 없다는 점을 참고하세요. 바꾸기 명령이 포함된 빈 정규식은 가장 최근에 일치하는 정규식을 재사용합니다. 스크립트에 그러한 표현식이 없으므로 첫 번째 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

관련 정보