2017-10-12 11 views
0

私はBashを使用して、WindowsからLinuxにRobot Frameworkリソースファイルを変換するシェルスクリプトを書いています。リソースファイル自体の内容は重要ではありませんが、ここには必要最小限の完全で検証可能な例があります。 beepは、ファイルをアップロードするサイトの能力をテストするために使用されるタイプのない空のファイルです。.txtファイル内の未定義の場所の文字列をシェルスクリプトで置き換えるにはどうすればよいですか?

*** Variables *** 
${DEFAULT_FILE}  C:\\Users\\user01\\Desktop\\beep 

、その変数の前と後にその場所は動作しませんハードコーディング宣言した変数の指定されていないと、刻々と変化する数があるでしょう。

私は次のように、シェルスクリプトで、このファイルを変更したい:

*** Variables *** 
${DEFAULT_FILE}  //home//user01//Desktop//beep 

関与リテラルは一つの壁を私を駆動し、他のダウン、およびエラーは、同様に私を運転しているされていますナッツ。私はsedを使用しようとしましたが、Stack Overflowの構文の推奨事項はどこにでもあります。

はここに私のコードの最新バージョンです:

old="C:\\\\Users\\\\user01\\\\Desktop\\\\beep" 
new="//home//user01//Desktop//beep" 
sed -i 's|'"${old}"'|'"${new}"'' /home/user01/Desktop/test.txt 

私の限られたバッシュの経験を持つ、私はそれは単純なものだと確信していますが、私の人生のために私はそれを把握することはできません。私が得ている最新のエラーは、パターンsed: -e expression #1, char [some number here]: unterminated 's' commandに従います。番号の値は毎回変わります。

答えて

2

パターンs/foo/bar/を閉じる必要があります - /が欠落しています。 [OK]を、gは何

sed実行今

sed -i 's|'"${old}"'|'"${new}"'|' /home/user01/Desktop/test.txt 

を試してみてくださいしかし\もう一回

$ old="C:\\\\\\\\Users\\\\\\\\user01\\\\\\\\Desktop\\\\\\\\beep" 
$ sed 's|'"${old}"'|'"${new}"'|' /tmp/foo 
*** Variables *** 
${DEFAULT_FILE}  //home//user01//Desktop//beep 

をエスケープする必要が

$ old="C:\\\\Users\\\\user01\\\\Desktop\\\\beep" 
$ new="//home//user01//Desktop//beep" 
$ cat > /tmp/foo 
*** Variables *** 
${DEFAULT_FILE}  C:\\Users\\user01\\Desktop\\beep 
$ sed 's|'"${old}"'|'"${new}"'|' /tmp/foo 
*** Variables *** 
${DEFAULT_FILE}  C:\\Users\\user01\\Desktop\\beep 

を代用しません何か?

バックスラッシュがshに特殊文字である:これは私たちに

$ old="C:\\\\Users\\\\user01\\\\Desktop\\\\beep" 
$ echo 's|'"${old}"'|'"${new}"'|' 
s|C:\\Users\\user01\\Desktop\\beep|//home//user01//Desktop//beep| 

を与える。しかし、バックスラッシュもsedに特殊文字

$ echo \" 
" 

$ echo '+' | sed 's/\+/-/' 
- 

だから、C:\Users\user01\Desktop\beepいる検索saには存在しませんファイル番号

+0

試しました。コンソールはエラーを返しませんでしたが、ファイルは変換されませんでした。副作用として、スクリプトはファイルを実行するように見えました。 –

+0

それは完璧に働いた、ありがとう。 –

関連する問題