【问题标题】:Using sed to replace character使用 sed 替换字符
【发布时间】:2017-11-15 17:50:37
【问题描述】:

本周我正在学习如何使用 awk 和 sed。我知道这个问题之前可能已经被问过,但我不确定我的脚本有什么问题。我有三个文件,我正在使用 grep 搜索模式 gge0001x gge0001y gge0001z。 x 在文件 1 中,y 在文件 2 中,z 在文件 3 中。如果有人想看 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"

我希望我的输出是曲线名称 gge0001x gge0001y gge0001z。但输出是这样的: 性能数据 gge0006ze gge0006x

如果我自己回显它们,那很好,但是一旦我在同一行上回显所有三个,输出就会出现偏差。当我回显它时,为什么 x 在第一次出现时最后出现,我的 y 去了哪里?

【问题讨论】:

  • 也许你在运行多个命令时需要&&,并且当你的替换字符时,它不会将更改保存到文件中,你知道的,对吧?
  • 我试过了,它给了我以下信息:性能数据曲线名称 gge0006x ./lab5.2: line 19: $'gge0006y\r': command not found
  • 您的文件中有\r 个字符。在您的输入文件上运行 dos2unix。
  • 永远不要将grep 传递给sed。而不是grep foo | sed 'cmd',只需执行sed '/foo/cmd'
  • 你应该使用sed 'y/F/ /',而不是sed 's/F/ /',但你应该使用tr F ' '

标签: bash awk sed


【解决方案1】:

首先有一些提示:

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/ /")

但输出是这样的:Performance Data gge0006ze gge0006x

Performance Data 出现在您的输出中的原因是,您在脚本的开头echo 它。

此外,您在最后一个 echo 中有错字:$curvename2 -> $curveName2,这就是为什么您的 y 不见了。

您是否仔细检查了文件的内容是否正确?这是我能想象的唯一原因,为什么你的 x 排在最后,而 z 排在最前。

【讨论】:

  • 感谢您的意见!我用curveName2修复了类型,但它仍然丢失。我仔细检查了所有三个文件,它们按顺序包含 x、y、z。
  • 您是否按照@WilliamPursell 的建议在它们上运行了dos2unix?输入文件中的 \rs 可能会导致光标跳回行首,因此接下来的输出会在视觉上覆盖前面的文本。
  • @EdMorton 做到了,它解决了所有问题!
【解决方案2】:

你也许可以将你的脚本压缩成一行

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

Curve name gge0006x gge0006y gge0006z

练习是搜索grep中使用的选项

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 2017-02-08
    • 2021-12-18
    • 2019-05-14
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多