gpt4 book ai didi

bash - 使用 sed 将条件字符串附加到文件

转载 作者:行者123 更新时间:2023-11-29 09:32:34 26 4
gpt4 key购买 nike

我必须制作一个脚本来查看 /etc/gdm/Xsession 并添加 -a ! -x "$HOME/.xsession" 如果需要的话。

1) 我想检查文件是否已经包含添加的部分。使用 grep,我尝试了这个:

if ! grep -q '-a ! -x "$HOME/.xsession"' "$xsessionScript"

它不起作用,因为 grep 试图解释简单引号之间的所有内容。

2) 如果我发现文件没有被修改,我想追加 -a ! -x "$HOME/.xsession" 到 if 语句:if [ "$1"!= "default"-a "$1"!= "custom"] 这样看起来喜欢:

if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]

我试着用 sed 来做:

sed -i.bck '/\"$1" != "default" -a "\$1" != "custom"/a  -a ! -x "$HOME/.xsession"'

但这将创建一个新行而不是在“custom”之后添加字符串。

请帮帮我!

非常感谢:)

顺便说一句,我使用的是 CentOs 6.6.1、sed 4.2.1、bash 4.1.2

编辑:

我要编辑的文件如下所示:

[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" ]; then # I want this line to become:
====> # if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]

最佳答案

#!/bin/bash

# I use variables for clarity
main='"\$1" != "default" -a "\$1" != "custom" '
appendix='-a ! -x "\$HOME/.xsession" '

sed -i.bck -r "s|($main)($appendix)?|\1$appendix|" input.txt

说明

  1. sed 's|||' 构造与 sed 's///' 相同。
  2. s|($main)($appendix)?| - 意思是:模式必须包含 $main 部分,但 $appendix 部分是可选的。 $appendix 可以存在也可以不存在。
  3. |\1$appendix| - 将模式替换为 $main(我使用 \1 捕获组而不是 $main 为简洁起见的变量)+ $appendix.

所以,我们得到了想要的行为:

  • 如果一行只包含main部分,它将被替换为main + appendix
  • 如果该行已经包含main + appendix,它将被替换为相同的。换句话说,它保持不变。

测试

输入

[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" ]; then
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]

输出

[...]
case $# in
[...]
case "$1" in
[...]
*)
if [ "$1" != "default" -a "$1" != "custom" -a ! -x "$HOME/.xsession" ]; then
exec $CK_XINIT_SESSION $SSH_AGENT /bin/sh -c "exec -l $SHELL -c \"$1\""
fi
;;
esac
esac
fi
[...]

关于bash - 使用 sed 将条件字符串附加到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46199759/

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