在带有条件的 ksh 脚本中使用 sed

发布于 2024-11-18 06:58:17 字数 389 浏览 1 评论 0原文

我正在使用 sed 命令来替换文本文件中的一些单词。该命令嵌入在 ksh 脚本中。 我想达到的是,并非每次 sed 的每个替换规则都会触发,只有在满足某些条件的情况下。例如,取决于 shell 变量的值。

换句话说,我想编写这个脚本而不使用 if 语句,我宁愿在 sed 中包含条件表达式。是否可以?

REPLACE_A=TRUE

if [ "$REPLACE_A" = "TRUE" ]
then
    cat myfile \
    | sed 's/A/B/g;
          's/C/D/g;
          's/E/F/g;'
else
    cat myfile \
    | sed 's/C/D/g;
          's/E/F/g;'    
fi

I'm using a sed command for replacing some words in text files. This command is embedded in a ksh script.
I would like to reach that not everytime will every replacement rule of sed fire, only if some conditions are filled. E.g. depending on a value of a shell variable.

In other words I would like to write this script without the if statement, I would rather include the conditional expression inside the sed. Is it possible?

REPLACE_A=TRUE

if [ "$REPLACE_A" = "TRUE" ]
then
    cat myfile \
    | sed 's/A/B/g;
          's/C/D/g;
          's/E/F/g;'
else
    cat myfile \
    | sed 's/C/D/g;
          's/E/F/g;'    
fi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你爱我像她 2024-11-25 06:58:17

我想到的唯一解决方案是将 sed 命令存储在变量中,例如

# in your script
SEDCMD=""
# ...
SEDCMD="s/A/B/g;"
# later 
SEDCMD="${SEDCMD}s/C/D/g;"
# ...
# finally
sed "$SEDCMD" FILE

但这仍然不是您想要的解决方案。

The only solution that pops into my mind is to store the sed command in a variable, like

# in your script
SEDCMD=""
# ...
SEDCMD="s/A/B/g;"
# later 
SEDCMD="${SEDCMD}s/C/D/g;"
# ...
# finally
sed "$SEDCMD" FILE

But it still not the solution you want.

英雄似剑 2024-11-25 06:58:17

你不能用 sed 来做到这一点,但可以用 awk 来做到。如果您想尝试,我建议您看一下:

http://www.grymoire。 com/Unix/Awk.html

You can't do it with sed, but with awk. If you like to try, I suggest you have a look at this:

http://www.grymoire.com/Unix/Awk.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文