「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, close2つの単語がありますが、意味上分離されている状況は...いいえ含まれています(交換なし!)。

これまでのところ、これは私にとって効果的です。

$ 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、各行に2つの代替項目を適用します。最初の置換は、openスペースまたはタブの数と単語の開始パターン()が続く単語と一致します\<xどのくらいのスペースやタブが見つかっても、に置き換えられます。openその単語の前に来ると、その単語を置き換えます。

2番目の代替は、残りの単語openl

関連情報