如何在shell脚本中使用sed命令

时间:2018-04-04 18:38:17

标签: linux shell sed

我有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

如何解决此问题?

2 个答案:

答案 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

做了同样的事。

相关问题