2013-05-08 5 views

답변

40

당신은이 중 하나와 함께 할 수 있습니다

sed 's/.*six.*/fault/' file  # check all lines 
sed '/six/s/.*/fault/' file  # matched lines -> then remove 

그것은 six을 포함하는 전체 라인을 얻고 fault으로 대체합니다.

예는 :

$ cat file 
six 
asdf 
one two six 
one isix 
boo 
$ sed 's/.*six.*/fault/' file 
fault 
asdf 
fault 
fault 
boo 

그것은 더 일반적으로 Replace whole line containing a string using Sed

this solution을 기반으로, 당신은 표현 sed '/match/s/.*/replacement/' file를 사용할 수 있습니다. 그러면 match이 포함 된 행에서 sed 's/match/replacement/' 표현이 수행됩니다. 귀하의 경우에는이 될 것이다 :

sed '/six/s/.*/fault/' file 

우리가 '하나 둘 6 ~ 8 열한 서너'을 가지고 우리가 우리의 "나쁜"로 '팔'과 '십일'를 포함 하려는 경우 말?

이 경우 우리는 여러 조건에 대한 -e를 사용할 수 있습니다 등등

sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file 

하고 있습니다.

또는도 :

sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file 
+0

우리가 'one two six eight eleven three four'을 갖고 'bad'라는 단어로 'eight'와 'eleven'을 포함 시키려면 어떻게해야합니까? s /.* six | eight | eleven. */fault/g 일할 것입니까? – irek

+0

'-e'를 사용하면 가능합니다. 업데이트 된 답변을 참조하십시오. – fedorqui

+0

시간 내 주셔서 감사합니다. – irek

3

이 당신 (GNU이 나오지도)을 위해 일 수 있습니다

sed -e '/six/{c\fault' -e ';d}' file 

나 : 답변 위

sed '/six/{c\fault'$'\n'';d}' file 
2

그냥 언급, 나를 위해 잘 작동 다른 방법으로

남 하나의 패턴을 ATCH하고 ​​새 것으로 교체 :

sed -i '/six/c fault' file 

일치 여러 패턴을하고 새 것으로 교체 (합치 명령) :

sed -i -e '/one/c fault' -e '/six/c fault' file 
관련 문제