![sed를 사용하여 구성 파일에 새 줄을 일치시키고 추가하면 중복 줄이 생성됩니다.](https://linux55.com/image/196433/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B5%AC%EC%84%B1%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%83%88%20%EC%A4%84%EC%9D%84%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EA%B3%A0%20%EC%B6%94%EA%B0%80%ED%95%98%EB%A9%B4%20%EC%A4%91%EB%B3%B5%20%EC%A4%84%EC%9D%B4%20%EC%83%9D%EC%84%B1%EB%90%A9%EB%8B%88%EB%8B%A4..png)
CONFIG_BLUE와 일치하는 sed 쿼리를 작성한 다음 그 아래에 CONFIG_GREEN을 추가하려고 합니다. 내가 만든 쿼리는 작동하지만 결과는 동일한 행이 두 번 반복됩니다.
sed 쿼리;
sed -i -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' test.txt
예;
CONFIG_BLUE=y
CONFIG_GREEN=y
CONFIG_GREEN=y (This shouldn't be here)
저는 정규 표현식을 처음 접했습니다. 내가 뭘 잘못하고 있는지 아시나요?
스크립트의 반복 코드 조각(test1.txt, test2.txt 등 허용)은 현재 1개의 파일만 사용하며 더 많은 파일로 확장되지 않았습니다.
for i in test*.txt
do
sed -i -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' test.txt
done
답변1
GNU를 사용한다고 가정하면 루프는 sed
파일에서 정규 표현식이 일치할 때마다 줄을 추가합니다. 쉘 와일드카드 패턴과 일치하는 현재 디렉토리의 각 파일 이름에 대해 동일한 파일에 동일한 행을 반복적으로 추가합니다.# CONFIG_GREEN=y
CONFIG_BLUE
test.txt
test*.txt
에 두 줄의 텍스트를 추가하려면 test.txt
다음을 수행하세요.
test*.txt
현재 디렉터리에 일치하는 파일 이름을 가진 다른 파일이 존재합니다.- 루프가 실행되기 전에도 이전 실행에서 텍스트 줄이 이미 파일에 있거나
- 실행 중이라고 생각하는 코드가 실행되고 있지 않습니다.
의 판단논평, 이는 세 가지 경우 중 두 번째입니다.
루프를 수정하려면 실제 호출에서 루프 변수를 사용하십시오 sed
.
for name in test*.txt; do
sed -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' "$name"
done
현재는 파일을 수정하지 않고도 결과를 확인하고 다시 실행할 수 있도록 -i
GNU 옵션을 제거했습니다 . sed
적절한 수의 파일이 있는 경우 sed
파일 이름 글로빙 패턴을 사용하여 직접 호출을 수행하여 모든 파일에 대해 순서대로 작업할 수 있습니다. GNU를 사용하는 경우 -i
여기에서 내부 편집도 수행할 수 있습니다.sed
sed -i -e '/CONFIG_BLUE/a\' -e '# CONFIG_GREEN=y' test*.txt