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


89

다음은 예제 파일입니다.

somestuff...
all: thing otherthing
some other stuff

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

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

답변:


166

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

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

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

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

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

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

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

무언가를 추가하는 것만으로 새 줄이 생기고 교체하는 것이 올바른 방법입니다.
ZHY

10

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

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

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


9

$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

Solaris에서는 다음 오류가 표시됩니다.awk: can't set $0
ceving

@ceving 그러면 /usr/xpg4/bin/awk"좋은"awk를 사용할 수 있습니다 .
fedorqui 'SO stop harming'Feb

6

bash에서 :

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

6

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

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

설명:

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

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

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


3

awk 솔루션 :

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

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


4
단축 할 수 있습니다 :awk '$1=="all:" {$(NF+1)="anotherthing"} 1'
glenn jackman

2
@Prometheus, awk 스크립트는 condition {actions}쌍 으로 구성 됩니다. 이 경우 condition생략, 조치는 모든 레코드에 대해 수행된다. 이 경우 {actions}생략하고 조건이 평가되는 사실 (수에 대한 경우이다 1) 다음의 기본 동작은 현재 레코드를 인쇄하는 것입니다.
glenn jackman 2013 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.