2016-12-02 4 views
0

ファイル(例:file_1_2.txt)を取り込み、 "_"を "。"(例:file.1.2.txt)に置き換えるシェルスクリプトを作成しようとしています。これは私の持っているものですが、実行すると空白の出力が得られます。文字を置き換えるためのシェルスクリプト?

変更されたファイル名を変数 "x"に格納してからxをコンソールに出力しようとしています。

私は2つの問題があり

./script2.sh < file_1_2.txt 
+0

'x ='と残りのコマンドの間のスペースを削除してみましたか? – Qeole

+0

私はそれをしてもまだ出力はありません。 – Tremors

+0

また、 'read'行で '$'を削除してみてください: 'read $ var'ではなく' read var'。これは私のために働く。 – Qeole

答えて

1

を書き込むことによって、このスクリプトを呼び出しています。まず、コードにいくつかのバグがあります:

read var 
x=`echo $var | sed 's/_/\./g'` 
echo $x 

が動作します。あなたは余分に$read varに入れました。スペースがあまりにも多く(上記のように)、あなたはsedの置換パターンを混ぜていました。あなたは、ファイル名に._を交換したい場合は、あなたのスクリプトに `file_1_2.txt」の内容を読み込みます<これを使用している場合は、

echo "file_1_2.txt" | ./script2.sh 

を行う必要があります。また

+0

これはステップ "file.1.2.txt"正しい方向ですが、実際にはファイル名自体は変更されません。私はその部分をどうやってやっていくのですか?編集:nevermind。とった。 "mv $ var $ x"ご協力いただきありがとうございます! – Tremors

+0

さらに簡単です。 'rename'または単に' prename': 'rename 's /_/\./ g" * .txt'を使用してください。あなたのtxtファイルのあるフォルダのターミナルでそれを実行すれば、名前が変更されます。 – CDe

+0

申し訳ありません@私はあなたがファイルの名前に取り組みたいとは思わなかったので、あなたはその内容を読みたいと思っていました。またごめんなさい@CDe、私はあなたのコメントを見る前に 'rename'で私の解決策を投稿しました。 – Qeole

1

唯一のbashで別の解決策、:

$ x=file_1_2.txt; echo "${x//_/.}" 
file.1.2.txt 

(詳細については、bashのマニュアルページの「パラメータの拡張」を参照してください)

そして、あなたはまた、renameでこれを行うことができます。

$ touch file_1_2.txt 
$ ls file* 
file_1_2.txt 
$ rename 'y/_/\./' file_1_2.txt 
$ ls file* 
file.1.2.txt 
0

Threreはbashのようsedのために必要とされていませんが、変数の置換をサポートしています。

$ cat ./script2 
#!/bin/bash 
ofile=$1 
nfile=${ofile//_/./} 
echo mv "$ofile" "$nfile" 
$ ./script2 file_1_2.txt 
mv "file_1_2.txt" "file.1.2.txt" 

あなたは結果に満足している場合は、ちょうどechoを削除。

関連する問題