gpt4 book ai didi

regex - 在 bash 中编辑文件的几行

转载 作者:行者123 更新时间:2023-12-02 09:07:36 24 4
gpt4 key购买 nike

您好,我想以这种方式解析 bash 中包含设置的 js 文件:

user_pref("network.proxy.socks", "127.0.0.1");
user_pref("network.proxy.socks_port", 9150);
user_pref("network.proxy.type", 1);
  • 如果这些行不存在,则应创建它(>>追加)。
  • 如果线路已经设置了这些值:则不执行任何操作。
  • 如果线路已设置不同的值,请将其更改为值“127.0.0.1”91501

到目前为止,我可以执行第 1 点和第 2 点,但在第 3 点上我很困难。我相信它可以通过使用 bash 条件和带有正则表达式模式的 'sed' 来实现。任何人(正则表达式大师)都可以帮助我吗?

<小时/>

快速介绍我的问题:

我正在 OS X 上编写 bash 脚本,并让ocks5 监听 127.0.0.1:9150。然后我想通过编辑 prefs.js 文件(相当于 url about:config)来设置 Firefox 的这些设置。其 GUI 为Preferences/Advanced/Network/Connection Settings/Manual Proxy/Socks5

仅供引用,这是我的脚本,缺少的部分是###MISSING PART###:

function sshD
{
pkill firefox #Kill existing instance(s) of Firefox
#Create HTTP Proxy via SSH Tunnel
ssh -Cc blowfish -D9150 -Nf myuser@mydomain
fxpref="$HOME/Library/Application Support/Firefox/Profiles/"; fxpref="$fxpref`ls "$fxpref" | awk 'NR==1'`/prefs.js"
test ! -f "$fxpref".backup && cp "$fxpref" "$fxpref".backup
proxypref=`cat "$fxpref" | grep proxy`
###MISSING PART###
/Applications/Firefox.app/Contents/MacOS/firefox-bin -private > /dev/null 2>&1 &
}

最佳答案

适用于 FreeBSD sed (OS X) 以及 GNU sed (Linux) 的解决方案 - 该方法的基础知识基于 @anishsane's answer :

注意:

  • 假设可以保留输入文件中首选项的原始顺序,以简化解决方案。
  • 因此,此解决方案首先有效地从输入文件中删除感兴趣的现有首选项(如果有),然后将它们与所需的(新)值附加到结束
sed -En '/user_pref\("network\.proxy\.(socks|socks_port|type)"/!p
$ a\
user_pref("network.proxy.socks", "127.0.0.1");\
user_pref("network.proxy.socks_port", 9150);\
user_pref("network.proxy.type", 1);
' prefs.js

注意:上面只是将结果输出到stdout;如果您想用结果替换输入文件,将原始文件保存到*.backup,请使用:

sed -En -i'.backup' ...

说明:

  • -E 打开对扩展正则表达式的支持,它添加了诸如 | 之类的关键功能以进行交替(除了需要更少的转义之外) .
  • -n 抑制(可能修改的)输入行的默认输出,以便仅显式输出函数,例如 pai 产生输出。
  • /user_pref\("network\.proxy\.(socks|socks_port|type)"/!p 导致打印所有不包含感兴趣的首选项的行;换句话说:现有的包含感兴趣的首选项(及其当前值)的行将被有效删除
  • $ a 将文本附加到输入的最后行($)之后的输出,这里只是输出感兴趣的首选项所需的值。
  • 总体而言,\ 转义换行符经过精心放置,以使 FreeBSD sed 满意 - 纯 GNU sed 解决方案会更简单;请参阅https://stackoverflow.com/a/24276470/45375了解两种实现之间的差异。

关于regex - 在 bash 中编辑文件的几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com