다음 형식의 파일 이름과 줄 번호 목록이 있습니다.
./foo.txt:1:(more characters)
./foo.txt:3:(more characters)
./bar.txt:10:(more characters)
목록은 파일에서 가져오거나 프로세스(예: grep -n
)에 의해 출력될 수 있습니다.
인용된 각 줄에 고정된 텍스트를 추가하고 해당 위치에서 파일을 수정하고 싶습니다.
예를 들어, foo.txt 파일에 다음 텍스트가 포함되어 있는 경우:
One
Two
Three
Four
다음을 포함하도록 수정하고 싶습니다.
One TODO
Two
Three TODO
Four
마찬가지로 bar.txt의 10번째 줄에 "TODO"를 추가해야 합니다.
어떻게 해야 하나요?
답변1
한 가지 옵션: ed를 사용하세요!
while IFS=: read -r filename linenumber junk
do
ed -s "$filename" <<< "$linenumber"$'s/$/ TODO/\nw\nq'
done < input
답변2
파일 이름에 :
개행 문자가 포함되어 있지 않다고 가정합니다.
echo "$list_of_file_names" | while IFS=: read -r file line text; do
sed -i "$line"'s/$/ TODO/' "$file"
done
노트: 내 생각에는 이것은 매우 나쁜 생각이다.
- 비효율적입니다(
sed
한 줄씩 실행).- 또는 를 포함하는
:
파일 이름에서 중단 됩니다\n
.일치하는 파일 + 줄을 사용
sed
하거나 찾는 것이 더 좋습니다awk
그리고텍스트를 추가하세요.