【发布时间】:2018-10-29 01:11:21
【问题描述】:
我有一个 sed 命令,它正在捕获带有 sometext 的单行。它正在捕获的文件中的行以换行结束。我正在尝试在管道中使用此变量,但是,当我尝试回显或将其与需要输入的其他命令一起使用时,结果为空白。前任:
sed '1,1!d' somefile.txt | echo "$1",我知道变量本身不是空的,因为我可以将 echo "$1" 替换为 cat $1 并查看正确的打印输出。
edit - 我尝试通过管道连接到 tr -d 并删除换行符。我已经确认换行符消失了,但回声仍然显示为空白。猫不会。
edit 2 - 我将变量输入到 if 语句 ... | if [[ -z $1 ]]; then cat $1; fi 中,它遇到了 if,被确定为空,因此运行 cat,它将非空行打印到控制台。如果变量为空,为什么 cat 还在打印信息?
是什么导致了这种不一致,我该如何解决我的问题?最终目标是运行一个 sed 的输出,通过另一个来替换目标文件中的特定行。
sed '1,1!d' somefile.txt | sed '2,1s/.*/'$1'/' targetfile.txt
somefile.txt 的内容:
these
are
words
targetfile.txt 的内容:
The next line should say these
This line should say these
The previous line should say these
sed 后的 echo 输出:
<empty>
sed 后 cat 的输出:
these
第二个 sed 的输出,使用来自第一个的输入:
The next line should say these
the previous line should say these
【问题讨论】:
-
创建一个可以测试的样本是什么意思?我已经完整地描述了我的过程。我在运行我自己的测试时从一个包含 3 行乱码的文件中取出一行。你真的需要我描述一个乱码测试文件的内容吗?我只是运行命令
sed'1,1!d' somefile.txt | echo "$1"、sed'1,1!d' somefile.txt | sed '1,1s/.*/'$1'/' FileToChange.txt"和sed'1,1!d' somefile.txt | cat $1其中 somefile.txt 的内容是这些\n 是\n 单词\n (每个单词当然是它自己的行)如上所述,Cat 是只有一个打印非空行。 -
我并不是说听起来粗鲁,但我刚才所说的一切都在我问的问题中。我不知道我应该如何在第一次 sed 之后给你输出,或者中间输出,因为我已经说过,在 cat 中不使用时它是空白的。你能更好地解释一下不清楚的地方吗?
-
@Erudaki 我们不需要您描述乱码测试文件的内容,我们需要您向我们展示测试内容文件,乱码或其他。措辞模棱两可——我们需要一个具体的minimal reproducible example,具有简洁、可测试的样本输入和执行的输出,以帮助证明您的问题,并且我们可以测试潜在的解决方案以查看它是否有效。另外,现在您向我们寻求帮助,以解决您认为解决问题的语法,而不是如何正确解决问题,即听起来像是 XY 问题。如果不清楚,请参阅How to Ask。
-
@Erudaki 请选择您的样本数据并单击
{}编辑图标或按ctrl+k... 对于给定的somefile.txt,您不需要使用\n... 和targetfile.txt,您能否添加预期的输出?我仍然不清楚您的要求是什么(不确定您是否知道what $1 means) -
带有示例输入数据的问题示例,预期输出格式正确 - stackoverflow.com/questions/46870285/… 和 stackoverflow.com/questions/48920626/…