如何在 sed 表达式中使用变量命令

问题描述 投票:0回答:1

测试一个简单的脚本,但我无法让这个变量与我合作。我已经尝试了很多东西,单引号和双引号。

新=$(df -h)

sed -ie "200s|^.*$|"${NEW}"|g" "file.txt"

我正在尝试用 df -h 的输出替换 file.txt 第 200 行上的所有内容。

需要帮助,如果以前有人问过这个问题,抱歉我的大脑已经烧焦了,我不够聪明,无法理解。

大多数时候,当我运行脚本时,我会收到“未终止的‘s’”错误。我认为这与变量周围的“{}”括号有关,并且它被误读为正则表达式中的其他内容。

regex bash variables sed
1个回答
0
投票

df -h
的输出有空格,因此您需要将其引用以防止分词。比较:

# wrong - ${NEW} is not inside the quotes on either its left or right hand sides 
sed -ie "200s|^.*$|"${NEW}"|g" "file.txt" 
# right - ${NEW} is within the double-quoted string
sed -ie "200s|^.*$|${NEW}|g" "file.txt"`

awk
在这里可能更具可读性/可维护性,因为您不必将数据插入命令字符串中:

awk -v substr="${NEW}" -v lineno=200 '
  { if (NR == lineno) { print substr } else {print $0} }
' file.txt > output.txt && mv output.txt file.txt
© www.soinside.com 2019 - 2024. All rights reserved.