1

grepを使用してファイルを解析し、その結果を後続のコマンドで使用するシェルスクリプトを作成しています。

ソースコードの関連部分は

VERSION=`grep "^Stable tag:" readme.md | awk -F' ' '{print $NF}'`
echo $VERSION
echo "Readme file version is $VERSION is it correct"

readme.mdファイルの関連行は次のとおりです。

Stable tag: 2.2.2

あなたはの出力を期待するでしょう

2.2.2
Readme file version is 2.2.2 is it correct

しかし、私は出力として次のものを取得しています

2.2.2
 is it correctrsion is 2.2.2

テキストファイルの行末に(印刷不可またはASCII以外の)文字がないことは間違いありません。:set invlistvimでコマンドを有効にして確認しました。

なぜそれがこのように起こっているのか考えていますか?または、この問題をデバッグするための他のアイデアはありますか?

4

1 に答える 1

2

これは DOS で編集されたファイルのように見え、あなたは Unix ライクなシステムで作業しています。キャリッジ リターンを取り除きます (Ctrl-M)。

tr(1)それらを削除するために使用できます:

VERSION=`grep "^Stable tag:" readme.md | tr -d '\015' | awk -F' ' '{print $NF}'`

Awk には、おそらくこれらに対応するための機能が組み込まれていますが、私は awk について十分な知識がありません。

于 2012-12-21T13:38:06.020 に答える