grep
から出力された文字列を置換したいのですが、私は持っています
$ npm info webpack | grep version
それは私を出力します
$ version: '2.1.0-beta.12',
を持っていたいと思っています
$ 2.1.0-beta.12
そこで、sed
を使って、不要な部分文字列を置換することで実現できそうな気がします。しかし、ここからが私にとって難しいところです
$ npm info webpack | grep version: | sed s/version: /
sed: -e expression #1, char 10: unterminated `s' command
どうすれば目標を達成できるのか?
54 None 2016-08-02
sedを使うのであれば、grepも使う必要はありません。試してみてください
npm info webpack | sed -En "s/version: '(.*)',/\1/p"
Example:
$ echo "version: '2.1.0-beta.12'," | sed -En "s/version: '(.*)',/\1/p"
2.1.0-beta.12
代替:awkを使用しています
同様に、awkを使えば、grepも必要ありません
npm info webpack | awk -F"[ ',]+" '/version:/{print $2}'
Example:
$ echo "version: '2.1.0-beta.12'," | awk -F"[ ',]+" '/version:/{print $2}'
2.1.0-beta.12
どのように機能するのか
-F"[ ',]+"
これは、スペース、単一引用符、カンマ、またはそれらの組み合わせをフィールドの区切り文字として使用するように awk に指示します
/version:/{print $2}
行に
version:
が含まれている場合は、2番目のフィールドを表示します
45 John1024 2016-08-02
sed
置換コマンド(s
)は、検索パターンと置換文字列を期待しています。検索パターンを指定しただけです。また、シェルでは文字列を適切に引用する必要があります
$ npm info webpack | grep 'version:' | sed 's/version: //'
これにより、'2.1.0-beta.12',
という結果が得られますが、これはあなたが望んでいるものではありません
grep
からの出力は非常にシンプルなので、cut
にデリミタ'
を付けて、行の2番目のフィールドを取得することができます(複雑な正規表現は必要ありません)
$ npm info webpack | grep -F 'version:' | cut -d "'" -f 2
これで2.1.0-beta.12
が出てきます
また、検索する文字列が正規表現ではなく固定文字列なので、-F
をgrep
に追加しました
8 Kusalananda 2016-08-02
まずは、sed
を使ってみてください
npm info webpack | grep version: | sed 's/version: //'
または、awk
を使用することができます
npm info webpack | grep version: | awk '{print $2}'
の方が簡単なのではないでしょうか
5 MariusMatutiae 2016-08-02