Perl replace 从脚本生成空文件,而不是从 bash
Perl replace produces empty file from script, not from bash
我现在对这个问题感到非常沮丧。我看不出我做错了什么。我遇到 google 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
因为 >
表示 'truncate the file'。更糟糕的是 - 它在开始阅读之前 first。因此,您在读取文件之前将其截断,从而导致将零长度文件送入零长度文件。
我建议你只用 perl 来做这件事,而不是中途之家。 perl
支持 "in place edit" 的 -i
选项。
或者直接在 perl
中编写脚本作为开始。 (如果给出示例输入和输出,那么敲出一个可以执行您想要的操作的示例将非常简单)。
如果您需要搜索和替换一些文本,我建议使用:
ack -l --print0 '2011...' ~/.config/google-chrome/Default/Preferences | xargs -0 -n 1 sed -i -e 's/2011../2015.../g'
我现在对这个问题感到非常沮丧。我看不出我做错了什么。我遇到 google 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
因为 >
表示 'truncate the file'。更糟糕的是 - 它在开始阅读之前 first。因此,您在读取文件之前将其截断,从而导致将零长度文件送入零长度文件。
我建议你只用 perl 来做这件事,而不是中途之家。 perl
支持 "in place edit" 的 -i
选项。
或者直接在 perl
中编写脚本作为开始。 (如果给出示例输入和输出,那么敲出一个可以执行您想要的操作的示例将非常简单)。
如果您需要搜索和替换一些文本,我建议使用:
ack -l --print0 '2011...' ~/.config/google-chrome/Default/Preferences | xargs -0 -n 1 sed -i -e 's/2011../2015.../g'