grepを実行してから出力で検索して置き換える方法は?

grepを実行してから出力で検索して置き換える方法は?

iconvには次の出力があります。

$ iconv -l | grep ISO | head -5
CSISO4UNITEDKINGDOM//
CSISO10SWEDISH//
CSISO11SWEDISHFORNAMES//
CSISO14JISC6220RO//
CSISO15ITALIAN//
durrantm:~

をどのように//変更できますか--

頑張ってたけど$ (iconv -l | grep ISO).gsub('\/\/','--')運がなかった。

答え1

それを使用する方法はいくつかありますtrawkまたはsed

TR:

 iconv -l | grep ISO |head -5 |tr '/' '-'

AWK:

iconv -l | awk '/ISO/{gsub("//","--"); print $0}' |head -5

社会経済開発局:

iconv -l | grep ISO |head -5 | sed 's/\//-/g'
# or, to avoid needing to escape the backslashes:
iconv -l | grep ISO |head -5 | sed 's#/#-#g'

答え2

grepややsed(のコマンドのサブセットgrepを表し、[s]ストリームと同様に適用されます)通常、一緒にパイプする必要はありません。g/re/pedseded

iconv -l | sed '/ISO/!d;s,//,--,g' | head -n 5

答え3

sedオプションです:

$ iconv -l | grep ISO | sed 's#/#-#g' | head -5
CSISO4UNITEDKINGDOM--
CSISO10SWEDISH--
CSISO11SWEDISHFORNAMES--
CSISO14JISC6220RO--
CSISO15ITALIAN--

答え4

これを行う方法はいくつかありますが、デフォルトで出力を抑制するにはsedaka-nまたは--quietオプションを使用します。--silent

iconv -l | sed -n -e '/ISO/ s://:--:p'

この sed スクリプトは、「ISO」が含まれていない行を無視し、 // を -- に変更した後(修正された)一致する行を印刷します。スクリプトの最後の「p」は、sedに一致する行を印刷するように指示します。

見苦しいバックスラッシュの脱出を避けるために、代わりに正規表現の:区切り記号を使用しました。/

詳細は sed のマニュアルページを参照してください。

関連情報