使用sed替换字符

时间:2017-11-15 17:50:37

标签: bash awk sed

本周我倾向于如何使用awk和sed。我知道之前可能会问过这个问题,但我不确定我的脚本有什么问题。我有三个文件,我使用grep搜索模式gge0001x gge0001y gge0001z。 x在file1中,y在文件2中,z在file3中。如果有人想看L2E [1-3] .iva,他们就在这里:https://gist.github.com/anonymous/1112988408874c730cd4f3d313226ba4

#!/bin/bash
echo "Performance Data"
sed -n '1,19p' L2E1.iva|cat > file1 #take lines 1-19 in L2E1 and take the 
# output into file1. The next two commands do the same thing
sed -n '1,19p' L2E2.iva|cat > file2
sed -n '1,19p' L2E3.iva|cat > file3
curveName=`grep "F" file1|sed "s/F/ /"`
# This will search for F in file 1, and then substitute F with a space 
curveName2=`grep "F" file2|sed "s/F/ /"`
curveName3=`grep "F" file3|sed "s/F/ /"`
echo "Curve Name" "$curveName $curveName2 $curveName3"

我希望我的输出为Curve Name gge0001x gge0001y gge0001z。但输出是这样的: 性能数据gge0006ze gge0006x

如果我自己回应它们那么它很好,但是一旦我在同一条线上回显所有三个,输出就会变得偏斜。为什么x在第一次显示时会显示在我回显它的位置以及我的y去哪里?

2 个答案:

答案 0 :(得分:0)

最初的一些提示:

sed -n '1,19p' L2E1.iva|cat > file1

您可以省略catsed的输出直接重定向到文件:

sed -n '1,19p' L2E1.iva > file1
curveName=`grep "F" file1|sed "s/F/ /"`

使用$()代替反引号进行流程替换:

curveName=$(grep "F" file1 | sed "s/F/ /")
  

但输出是这样的:性能数据gge0006ze gge0006x

输出中效果数据的原因是,您在脚本开头echo

此外,您在最后echo:$曲线 n ame2 - >中输入了拼写错误。 $ curve N ame2,这就是您的 y 缺失的原因。

您是否仔细检查过您的文件以获取正确的内容?这是我能想象的唯一原因,为什么你的 x 是最后一个,而 z 是第一个。

答案 1 :(得分:0)

您可以将脚本压缩成一行

$ echo Curve name $(grep -Pohm1 '(?<=F ).*' L2E{1..3})

Curve name gge0006x gge0006y gge0006z

练习是搜索grep

中使用的选项