下面是我的测试脚本,其中我试图在运行时替换脚本中的一行。
/home/xxx/test.sh
#!/bin/bash
SCRIPT_PATH=`pwd`/`basename $0`
username=admin
password='pass1234'
u="$(grep 'username' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
p="$(grep 'password' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
sed -i "s/user=/user="${u}"/3" "$SCRIPT_PATH"
sed -i "s/pass=/pass="${p}"/3" $SCRIPT_PATH
user=
pass=
问题:sed实际上是在这里替换搜索模式。我试过" 3"最后希望它将针对文件中的第3次出现,但这并没有按预期工作。
我想用user = admin替换最后一个user =和pass =并传递=' pass1234'
任何建议。还在努力。
OUTPUT我希望文件更改为:
#!/bin/bash
SCRIPT_PATH=`pwd`/`basename $0`
username=admin
password='pass1234'
u="$(grep 'username' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
p="$(grep 'password' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
sed -i "s/user=/user="${u}"/3" "$SCRIPT_PATH"
sed -i "s/pass=/pass="${p}"/3" $SCRIPT_PATH
user=admin
pass='pass1234'
答案 0 :(得分:1)
您应该使用self.menuTable.selectRowAtIndexPath(index, animated: true, scrollPosition: UITableViewScrollPosition.Middle)
只获取用户名和密码的第一个匹配项。您可以使用self.tableView
和grep -m 1
来匹配您想要更改的行:
^user=
输出是:
^pass=
答案 1 :(得分:1)
我完全使用了Nathan建议的内容,除了我匹配sed正则表达式中的行尾[ - {1}}和user=$
。这样,如果脚本多次运行,则不会再次将“admin”和“'pass1234'”添加到admin=$
和user=
admin=
答案 2 :(得分:0)
您可以在脚本中使用此sed
命令而不是那两个sed
命令(它使用扩展的正则表达式):
sed -nr 's@(user|pass)\w+=(.*)@s/^\1=$/\&\2/@p' "$SCRIPT_PATH" |sed -ri -f- "$SCRIPT_PATH"
<小时/> 例如:
剧本:
#!/bin/bash
SCRIPT_PATH=`pwd`/`basename $0`
username=admin
password='pass1234'
u="$(grep -m 1 'username' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
p="$(grep -m 1 'password' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
sed -nr 's@(user|pass)\w+=(.*)@s/^\1=$/\&\2/@p' "$SCRIPT_PATH" |sed -ri -f- "$SCRIPT_PATH"
user=
pass=
将更改为:
#!/bin/bash
SCRIPT_PATH=`pwd`/`basename $0`
username=admin
password='pass1234'
u="$(grep -m 1 'username' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
p="$(grep -m 1 'password' $SCRIPT_PATH | awk -F'=' '{ print $2 }')"
sed -nr 's@(user|pass)\w+=(.*)@s/^\1=$/\&\2/@p' "$SCRIPT_PATH" |sed -ri -f- "$SCRIPT_PATH"
user=admin
pass='pass1234'