원본 파일
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|heloo good morning everyone|1|123|abc|123|abc
대체된 파일
123|abc|heloo good morning freinds|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc
보시다시피 구분 기호는 입니다 |
. 이제 블록에 "Everyone"이라는 단어가 포함되어 있으면 해당 특정 블록을 "내가 보고 싶은 내용은 다음과 같습니다"로 변경해야 합니다.
답변1
필드를 반복하면서 일치하는지 확인하세요.
awk 'BEGIN{FS=OFS="|"}
{for (i=1; i<=NF; i++)
if ($i ~ "everyone") $i="this is what i want to see"
print}' file
출력을 봅니다.
$ awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) if ($i ~ "everyone") $i="this is what i want to see"; print}' file
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what i want to see|1|123|abc|123|abc
보다 관용적인 방법으로 if
조건을 다음과 같이 작성한 ($i ~ "everyone") && $i="this is what i want to see"
다음 실제 조건을 사용하여 해당 행을 인쇄할 수 있습니다.
awk 'BEGIN{FS=OFS="|"} {for (i=1; i<=NF; i++) ($i ~ "everyone") && $i="this is what i want to see"} 1' file
답변2
sed 's/[^|]*everyone[^|]*/this is what I want to see/g' <<\DATA
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|heloo good morning everyone|1|123|abc|123|abc
DATA
산출
123|abc|heloo good morning friends|1|123|abc|123|abc
123|abc|this is what I want to see|1|123|abc|123|abc
이는 다음 항목과 일치합니다.모든 사람구분 기호를 제외하고 왼쪽 또는 오른쪽의 전체 시퀀스|. 따라서 위의 방법이 작동합니다. 그러나 그것은 또한 사실이다:
sed 's/[^|]*everyone[^|]*/replace/g' <<\DATA
everyone|everyevery|every|one|
everyone|everyone|heloo good morning everyone|everyone|123|abc|123|abc
DATA
산출
replace|everyevery|every|one|
replace|replace|replace|replace|123|abc|123|abc