파일 이름과 줄 번호 목록이 있습니다. 이 줄을 어떻게 수정할 수 있나요?

파일 이름과 줄 번호 목록이 있습니다. 이 줄을 어떻게 수정할 수 있나요?

다음 형식의 파일 이름과 줄 번호 목록이 있습니다.

./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그리고텍스트를 추가하세요.

관련 정보