한 줄에서 다른 문자열이 발견되면 한 문자열을 바꾸는 방법은 무엇입니까?

한 줄에서 다른 문자열이 발견되면 한 문자열을 바꾸는 방법은 무엇입니까?

Unix 파일의 한 줄에서 "ny" 문자열이 발견되면 문자열 "xy"를 다른 문자열 "ab"로 바꾸고 싶습니다.

예시 텍스트:

If we have xy today we can go to ny.
If we have xy tomorrow we can go to ny tomorrow.
If we have mn now we can go to ny now.

출력 텍스트는 다음과 같아야 합니다.

If we have ab today we can go to ny.
If we have ab tomorrow we can go to ny tomorrow.
If we have mn now we can go to ny now.

답변1

sed아마도 가장 간단한 방법은 다음과 같습니다.

sed '/ny/s/xy/ab/g' file

/ny/여기에는 패턴을 검색하고 s/xy/ab/g실제 교체를 수행하는 두 가지 하위 명령이 포함되어 있습니다 . 이는 모든 항목을 대체한다는 점에 유의하세요 xy. 각 줄의 첫 번째 항목만 바꾸려면 마지막 항목만 제거하세요 g.

답변2

정답은 awk:

awk '/ny/ {gsub(/xy/,"ab")}; {print}' test.txt

설명하다

  • /ny/ny: 온라인 상태에서만 다음 명령을 실행합니다.
  • gsub(/xy/,"ab"): 은 이 줄에서만 /xy/으로 대체됩니다 ab.
  • {print}: 어느 줄에 있든 상관없이 해당 줄을 인쇄하세요.

관련 정보