我有shell脚本我正在使用SED命令,我正在读取文件并从每个语句中删除HELLO之后的所有字符,但我仍然得到空值
file=commit.txt
while IFS= read line
do
commitid=$line | sed "s/ HELLO.*'[^']*'/ /"
echo $line | sed "s/ HELLO.*'[^']*'/ /" /* Not removing character*/
echo $commitid /* Returning null*/
done <"$file"
我的文件有2条声明
dummy statement Hello world
dummy 1 statement Hello Mike
预期产出
dummy statement
dummy 1 statement
如何解决此问题?
答案 0 :(得分:1)
这是一项简单的sed
工作如下。
file="commit.txt"
sed 's/Hello.*//g' "$file"
答案 1 :(得分:1)
你需要的是&#34;命令替换&#34;在bash中。为此,您必须使用$()
while IFS= read line
do
val1=$(echo "$line"|sed 's/HALLO/TEST/')
val2=$(echo "$val1"|sed 's/TEST/XYZ/')
echo $val2
done < test.txt
我使用了一个更简单的sed表达式来查看它与我的文本文件一起使用。如您所见,我首先用TEST替换HALLO,然后用XYZ替换下一行TEST。因此,您可以看到变量内容已处理并传递给下一次评估。
输入:
eins HALLO zwei
eins HALLO zwei
eins HALLO zwei
eins HALLO zwei
输出:
eins XYZ zwei
eins XYZ zwei
eins XYZ zwei
eins XYZ zwei
更新: 提供输入数据后,脚本可以是:
while IFS= read line
do
val=$(echo "$line"|sed 's/Hello.*$//')
echo $val
done < test.txt
但实际上这里不需要脚本:
sed 's/Hello.*$//' test.txt > output.txt
做了同样的事。