[英]Perl replace produces empty file from script, not from bash
我此刻對此問題感到非常沮喪。 我看不出我做錯了什么。 我有谷歌Chrome的這個問題,它給出了沒有正確關閉的通知。 我想擺脫這個。 此外,我還有一些與全屏尺寸有關的舊版更換。 在bash中,所有行都產生預期的結果; 但是,在腳本文件中,它會生成一個空的設置文件...
這些行在文件中:
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"work_area_bottom.*/\"work_area_bottom\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f2),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"bottom.*/\"bottom\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f2),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"work_area_right.*/\"work_area_right\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f1),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"right.*/\"right\": $(xrandr | grep \* | cut -d' ' -f4 | cut -d'x' -f1),/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"exit_type.*/\"exit_type\": \"Normal\",/" > ~/.config/google-chrome/Default/Preferences
cat ~/.config/google-chrome/Default/Preferences | perl -pe "s/\"exited_cleanly.*/\"exited_cleanly\": true,/" > ~/.config/google-chrome/Default/Preferences
我一直在谷歌上搜索這個問題; 但是,我沒有得到正確的搜索詞來獲得有用的結果。
通過使用perl -p -i -e
選項解決問題,如下所示:
perl -p -i -e "s/\"exit_type.*/\"exit_type\": \"Normal\",/" ~/.config/google_chrome/Default/Preferences
以上行足以擺脫不正確關機的Google Chrome消息
你的問題幾乎可以肯定:
> ~/.config/google-chrome/Default/Preferences
因為那>
說'截斷文件'。 更糟糕的是-它開始閱讀之前, 先做到這一點。 因此,在讀取文件之前截斷文件,導致零長度文件進入零長度文件。
我建議你只想在perl中這樣做,而不是在中途宿舍。 perl
支持-i
選項進行“就地編輯”。
或者只需在perl
編寫腳本即可。 (如果給出樣本輸入和輸出,那么敲一個能做你想做的事的例子就會非常簡單)。
如果您需要搜索並替換一些文本我建議使用:
ack -l --print0 '2011...' ~/.config/google-chrome/Default/Preferences | xargs -0 -n 1 sed -i -e 's/2011../2015.../g'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.