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
2つの単語がありますが、意味上分離されている状況は...いいえ含まれています(交換なし!)。
これまでのところ、これは私にとって効果的です。
$ 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番目の代替は、残りの単語open
をl
。