sed 명령은 모든 열의 첫 번째 줄을 확인하고 바꿉니다.

sed 명령은 모든 열의 첫 번째 줄을 확인하고 바꿉니다.

파일.txt:

    if (early_timeout == TRUE) {
    sprintf(send_buff, "XYZ: Command timed out",
                    command_timeout);
    result = UNKNOWN;
    }

위는 적절한 들여쓰기가 적용된 파일의 샘플 내용입니다. 를 사용 XYZ하여 교체 하려고 ABC하면 조금 어렵습니다 sed.

  1. But을 사용 하면 sed -i '/^.*sprintf/ s/XYZ/ABC/g' file.txt(printf, asprintf)가 단어로 비교되어 전체 파일에서 (sprintf, asprintf 등)으로 시작하는 모든 줄이 대체됩니다 sprintf.
  2. 이 경우 sed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt줄의 첫 번째 단어를 비교하는 데 사용됩니다(예: sprintf비교 및 ​​바꾸기). 파일에 추가 들여쓰기가 있으면 실패합니다.

어디에서나 시작하는 단어를 구체적으로 비교한 다음 대체 작업을 수행하도록 sed하는 방법이 있습니까?

sed -r 's/^[ \t]*//'내가 발견한 한 가지 방법은 file.txt의 내용을 std 출력의 왼쪽에 정렬하는 데 적용한 다음 sed -i '/^.sprintf/ s/XYZ/ABC/g' file.txt한 번에 결합하고 실행할 수 있는 방법이 있습니까? 아니면 이를 달성하기 위한 다른 방법이 있습니까? 이것은 잘 작동하지 않는 것 같고 나는 약간 길을 잃었습니다.

답변1

sed '/^[[:blank:]]*sprintf/ {s/XYZ/ABC/g;}' infile

이는 줄이 앞에 공백과 탭이 없거나 더 이상 없이 시작되고 그 뒤에 가 오는 XYZ모든 문자열을 대체합니다 .ABCsprintf

관련 정보