【问题标题】:discrepency in command line argument vs .sed file input命令行参数与 .sed 文件输入的差异
【发布时间】:2020-03-15 07:23:22
【问题描述】:

所以我有一个使用 sed 和 bash 的项目,我试图理解为什么在命令行输出中它给我一个值,而在实际项目中它给我一个不同的值。

在我正在执行的命令行中

sed 's/||/ || /g' filename

在我输入的 sed 文件中

s/||/ || /g

现在命令行中的第一个命令给了我正确的输出,但我试图理解为什么当我在 sed 文件中使用该命令时它没有给我相同的输出。 在我的 bash 文件中,我正在调用 sed 文件

sed -rf sedFile $1

然后将程序运行为

./bashfile.bash fileName

【问题讨论】:

  • 由于命令有空格,您是否尝试过将命令放在引号内的文件中?
  • 是的,我试过了,它给出了一个错误代码:未知命令`“'
  • @AntonioCampos,如果my answer 不是您所期望的,请在您的问题中包括您期望的输出以及您获得的输出。
  • 为什么要使用-r 选项?正如@EnricoMariaDeAngelis 指出的正则表达式的这种影响。顺便说一句,-r 相当于 -E

标签: sed command-line command-prompt


【解决方案1】:
sed 's/||/ || /g' filename

完全不同

sed -rf sedFile filename

后者本质上是

sed -r 's/||/ || /g' filename

它会产生完全不同的结果,因为-r 会将| 的含义从字面垂直条更改为交替。因此,搜索模式中的|| 匹配零长度字符串、零长度字符串或零长度字符串,这意味着它将匹配字符之间的任何位置(零长度)(包括第一个字符之前和之后最后一个字符)。

echo ,,,, | sed -r 's/||/_||_/g' # underscores for visibility in the output

有以下输出

_||_,_||_,_||_,_||_,_||_

顺便说一句,s/|/ || /g 会产生同样的效果,而s// || /g 是无效的。

【讨论】:

  • 啊,好吧,我明白为什么它没有按照我的意愿去做。但我正在寻找的输出基本上是在 || 之前和之后添加一个空格字符并固定它之间的间距。
  • @AntonioCampos 然后呢?请编辑您的问题并显示示例输入和示例输出!答案稍微取决于输入文件|| 周围是否没有空格,或者只有一个(只有左边或只有右边,两者都有),或者其他。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2013-12-10
  • 2014-06-13
  • 2010-09-16
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多