[bash] sed 또는 awk로 패턴을 포함하는 줄 끝에 추가하는 방법은 무엇입니까?

다음은 예제 파일입니다.

somestuff...
all: thing otherthing
some other stuff

내가하고 싶은 것은 다음과 all:같이 시작하는 줄에 추가하는 것입니다 .

somestuff...
all: thing otherthing anotherthing
some other stuff



답변

이것은 나를 위해 작동합니다

sed '/^all:/ s/$/ anotherthing/' file

첫 번째 부분은 찾을 패턴이고 두 번째 부분은 $줄 끝을 사용하는 일반 sed의 대체 입니다.

프로세스 중에 파일을 변경하려면 -i옵션을 사용하십시오.

sed -i '/^all:/ s/$/ anotherthing/' file

또는 다른 파일로 리디렉션 할 수 있습니다.

sed '/^all:/ s/$/ anotherthing/' file > output


답변

이것은 당신을 위해 작동합니다

sed -e 's_^all: .*_& anotherthing_'

s 명령 (대체)을 사용하여 정규식을 충족하는 행을 검색 할 수 있습니다. 위의 명령 &에서 일치하는 문자열을 나타냅니다.


답변

$0조건과 일치하면 awk에 텍스트를 추가 할 수 있습니다 .

awk '/^all:/ {$0=$0" anotherthing"} 1' file

설명

  • /patt/ {...}선이에서 지정한 패턴과 일치하면에 patt설명 된 작업을 수행합니다 {}.
  • 이 경우 : /^all:/ {$0=$0" anotherthing"}줄이로 시작하면 (로 ^표시됨) 줄에 all:추가 anotherthing합니다.
  • 1참 조건으로 기본 동작을 트리거합니다 awk: 현재 줄을 인쇄합니다 ( print $0). 이것은 항상 발생하므로 원래 줄 또는 수정 된 줄을 인쇄합니다.

테스트

주어진 입력에 대해 다음을 반환합니다.

somestuff...
all: thing otherthing anotherthing
some other stuff

변수에 추가 할 텍스트를 제공 할 수도 있습니다.

$ awk -v mytext=" EXTRA TEXT" '/^all:/ {$0=$0mytext} 1' file
somestuff...
all: thing otherthing EXTRA TEXT
some other stuff


답변

bash에서 :

while read -r line ; do
    [[ $line == all:* ]] && line+=" anotherthing"
    echo "$line"
done < filename


답변

다음은 sed를 사용하는 또 다른 간단한 솔루션입니다.

$ sed -i 's/all.*/& anotherthing/g' filename.txt

설명:

all. *는 ‘all’로 시작하는 모든 행을 의미합니다.

& 일치를 나타냅니다 (예 : ‘all’로 시작하는 전체 줄)

그런 다음 sed는 전자를 나중으로 바꾸고 ‘anotherthing’단어를 추가합니다.


답변

awk 솔루션 :

awk '{if ($1 ~ /^all/) print $0, "anotherthing"; else print $0}' file

간단히 : 행이 allprint와 “anotherthing”으로 시작하면 행만 인쇄합니다.


답변