ファイル(例:file_1_2.txt)を取り込み、 "_"を "。"(例:file.1.2.txt)に置き換えるシェルスクリプトを作成しようとしています。これは私の持っているものですが、実行すると空白の出力が得られます。文字を置き換えるためのシェルスクリプト?
変更されたファイル名を変数 "x"に格納してからxをコンソールに出力しようとしています。
私は2つの問題があり
./script2.sh < file_1_2.txt
ファイル(例:file_1_2.txt)を取り込み、 "_"を "。"(例:file.1.2.txt)に置き換えるシェルスクリプトを作成しようとしています。これは私の持っているものですが、実行すると空白の出力が得られます。文字を置き換えるためのシェルスクリプト?
変更されたファイル名を変数 "x"に格納してからxをコンソールに出力しようとしています。
私は2つの問題があり
./script2.sh < file_1_2.txt
を書き込むことによって、このスクリプトを呼び出しています。まず、コードにいくつかのバグがあります:
read var
x=`echo $var | sed 's/_/\./g'`
echo $x
が動作します。あなたは余分に$
をread var
に入れました。スペースがあまりにも多く(上記のように)、あなたはsedの置換パターンを混ぜていました。あなたは、ファイル名に.
で_
を交換したい場合は、あなたのスクリプトに `file_1_2.txt」の内容を読み込みます<
これを使用している場合は、
echo "file_1_2.txt" | ./script2.sh
を行う必要があります。また
。
これはステップ "file.1.2.txt"正しい方向ですが、実際にはファイル名自体は変更されません。私はその部分をどうやってやっていくのですか?編集:nevermind。とった。 "mv $ var $ x"ご協力いただきありがとうございます! – Tremors
さらに簡単です。 'rename'または単に' prename': 'rename 's /_/\./ g" * .txt'を使用してください。あなたのtxtファイルのあるフォルダのターミナルでそれを実行すれば、名前が変更されます。 – CDe
申し訳ありません@私はあなたがファイルの名前に取り組みたいとは思わなかったので、あなたはその内容を読みたいと思っていました。またごめんなさい@CDe、私はあなたのコメントを見る前に 'rename'で私の解決策を投稿しました。 – Qeole
唯一の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
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
を削除。
'x ='と残りのコマンドの間のスペースを削除してみましたか? – Qeole
私はそれをしてもまだ出力はありません。 – Tremors
また、 'read'行で '$'を削除してみてください: 'read $ var'ではなく' read var'。これは私のために働く。 – Qeole