bashでgrepとsedを使用する

bashでgrepとsedを使用する

これは評価や成績のない週間練習です(答えも得られませんでした!)。

誰かが私にこの練習を説明する時間があれば、本当に感謝します。私は週末にこの練習を完了しようとしており、来週まで教師の助けを借りることができないからです。私はbashプログラミング、正規表現、およびgrepについてたくさんの本を読んで作業しました。しかし、以下のコードは私を混乱させます。

ガイドラインが不完全か理解できないのか疑問に思います。

具体的には、以下の内容により、内容全体を理解できません。

NAMES=`ls *.$1`

filed=$(file:$1).$2

演習 4.3
以下の内容を含むテキストファイル(myfile という)が与えられたとします。

#!/bin/bash

NAMES=`ls *.$1`

for file in $NAMES; do
    filed=$(file%:$1).$2
    mv file filed
done

次のコマンドを実行します。 $ grep ' file ' myfile

 $ grep 'file*' myfile

 $ grep '^ *file*' myfile

 $ grep 'file$' myfile

 $ sed 's/ file* / script /g' myfile

 $ sed ' /for/,/files/d' myfile

 $ sed '/\$[A-Z]..[A-Z]*/d' myfile

次に、出力または結果を解釈します。

ベストアンサー1

NAMES=`ls *.$1`

これは仕事です。変数に$NAMES値が割り当てられます。値はバックティックでマークされたコマンドの出力として扱われます(コマンドの置換を参照man bash)。$1スクリプトの最初のパラメータに対応する特別なパラメータです。したがって、拡張子を引数(例./script.sh txt:)として使用してスクリプトを実行する必要があり、lsコマンドの出力が変数に格納されるようです。

filed=$(file%:$1).$2

本当に変です。実際、かっこが中かっこではないことは確実ですか?そして.代わりににする必要があります:

filed=${file%.$1}.$2

${var%pattern}変数の末尾からパターンを切り取ります。man bash詳細については、パラメータ拡張を参照してください。したがって、この場合、点と最初の引数によって提供された拡張子を削除し、点と2番目の引数を追加します。

ところで、動くラインはおそらく

mv $file $filed

それ以外の場合、ループを使用する理由はありません。

おすすめ記事