簡體   English   中英

Perl replace從腳本生成空文件,而不是從bash生成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM