ソートされていない単語のリストが2つあり、選択した特定の文字を除く新しい単語のリストを作成して、順番にソートしたいと思います。次のコマンドを試しました。
cat roa7.lst gr7.usl | sed -e 's/\s/\n/g' | sed -n 's/[^hlrw]/&/p' | sort -u | less -N
ただし、最後のsedコマンドは文字セットを含む行を除外しようとしましたが、これらの[hlrw]
単語の除外に失敗しました。どういうわけか、私は区切り文字の中のカラットの使いやすさを逃しました。このパイプをどのように修正しますか?
答え1
最後のコマンドの正しい構文sed
は次のとおりです。
sed -n '/[hlrw]/!p'
または
sed '/[hlrw]/d'
ほぼ同じです。そのawk
手順は次のとおりです。
awk '!/[hlrw]/'
元の例では、誤ったコマンドは「セットにない文字を含みます」(行が、、または文字でhlrw
完全に構成されていない限り正しいものです)を意味し、2番目のコマンドは「セットにない文字を含む文字を探してください」です。 「セット」の「設定」行を印刷し、「セットを含む行を見つけて」入力から削除します。h
l
r
w
hlrw
hlrw
答え2
しかし、ここではそうする必要はありませんsed
。次のことができます。
grep -v '[hlrw]'
最初の(非標準)項目は次のようsed -e 's/\s/\n/g'
に置き換えることもできます。
tr -s '[:space:]' '[\n*]'
すべての空白シーケンスを改行文字に変換して圧縮します。
これは実際に使用を正当化します(ファイル名を引数として使用して直接読み取ることができるので、cat
必要ありません)。sed
sed
したがって、代替構文は次のようになります。
cat roa7.lst gr7.usl | tr -s '[:space:]' '[\n*]' | grep -v '[hlrw]' | sort -u | less -N
これを行うとsed
。