sed를 사용하여 여러 파일의 특정 줄과 필드에서 문자열을 바꾸는 방법

sed를 사용하여 여러 파일의 특정 줄과 필드에서 문자열을 바꾸는 방법

다음 내용이 포함된 파일이 있다고 가정해 보겠습니다.

2:33:4:F:T:Y
1:10:0:A:B:C:D:E:F:G:

F두 번째 줄을 사용하여 R여러 파일로 어떻게 변경할 수 있습니까 sed?

원하는 출력은 다음과 같습니다.

2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:

편집하다:

변경 사항은 필드가 :로 구분된 각 파일의 두 번째 줄에만 있어야 하므로 9번째 필드를 변경하고 해당 필드에 F 이외의 항목이 있으면 무시해야 합니다.

답변1

그리고 awk:

F에서 R까지 2nd모든 파일과 모든 줄을 교체하십시오 .9th field

$ awk  'BEGIN{FS=OFS=":"} FNR==2{ sub(/^F$/,"R",$9); }1' file1 file2 
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:

답변2

awk를 사용하세요:

$ awk -F: -vOFS=: '($9=="F" && NR==2){$9="R"}1' file
2:33:4:F:T:Y
1:10:0:A:B:C:D:E:R:G:

파일이 많은 경우 다음을 수행하세요.

for file in *; do 
    awk -F: -vOFS=: '($9=="F" && NR==2){$9="R"}1' "$file" > newfile &&
    mv newfile "$file"
done

또는 최신 버전의 GNU awk를 사용하세요.

gawk -iinplace -F: -vOFS=: '($9=="F" && FNR==2){$9="R"}1' file.*

관련 정보