"open"이라는 단어를 다양한 조건으로 대체

"open"이라는 단어를 다양한 조건으로 대체

sed다음 조건으로 대체 스크립트를 작성했습니다.

  • "open"이라는 단어가 다른 단어 앞에 오면 "open"이라는 단어를 "x"로 변경합니다.
  • "open"이라는 단어가 다른 단어 앞에 나오지 않으면 "open"이라는 단어를 "l"로 변경합니다.

예를 들어 예상 입력은 다음과 같습니다.

open
open door
open blue door
can you open door
the door is open

예상되는 출력은 다음과 같습니다.

l
x door
x blue door
can you x door
the door is l

방금 구현한 코드는 다음과 같습니다(정말 처음 접하는 코드이기 때문입니다).

sed 's/open/x/g'

답변1

구두점으로 무엇을 해야 할지 추측만 할 수 있으므로 open, close두 단어가 있지만 의미상 분리되어 있는 상황은...아니요포함되어 있습니다(교체 없음!).

지금까지 다음이 나에게 효과적입니다.

$ cat test.txt
open  
open door
open blue door
can you open door
the door is open
$ sed -E 's/\<open([[:space:]]+[[:alnum:]]+)/x\1/g;s/\<open[[:space:]]*$/l/g' test.txt
l
x door
x blue door
can you x door
the door is l

답변2

질문에 제공한 샘플 데이터를 사용하여:

$ sed -E -e 's/\<open([[:space:]]+)\</x\1/g' -e 's/\<open\>/l/g' file
l
x door
x blue door
can you x door
the door is l

이는 sed각 줄에 두 개의 대체 항목을 적용합니다. 첫 번째 대체는 open공백이나 탭의 개수와 단어 시작 패턴( )이 뒤따르는 단어와 일치합니다 \<. x얼마나 많은 공백이나 탭이 발견되든 상관없이 로 대체됩니다 . open해당 단어 앞에 오면 해당 단어를 바꿉니다.

두 번째 대체는 나머지 단어 openl.

관련 정보