bash脚本中的sed输出为空

bash脚本中的sed输出为空,bash,sed,Bash,Sed,我有一个文件,除了其他数据外,还包括以下一百行 (abc-wxyz1/2222 1234) 1234是一个随机数,对于所有100行来说都是不同的。我想把所有的线都换成 (abc-wxyz1/2222 *) 我使用下面的代码 cat input.txt | \ sed -i -e 's/\(abc\-wxyz1\/2222\ [0-9]\+\)/\(abc\-wxyz1\/2222\ \*\)/g' > output.txt 我得到的output.txt是空的,我不知道为什

我有一个文件,除了其他数据外,还包括以下一百行

(abc-wxyz1/2222 1234)
1234是一个随机数,对于所有100行来说都是不同的。我想把所有的线都换成

(abc-wxyz1/2222 *)
我使用下面的代码

 cat input.txt | \
     sed -i -e 's/\(abc\-wxyz1\/2222\ [0-9]\+\)/\(abc\-wxyz1\/2222\ \*\)/g' > output.txt

我得到的output.txt是空的,我不知道为什么。我做得对吗?

如果要使用标志
-I,--in-place
,则不必重定向输出。如预期的那样,替换已到位

但是,您可以通过以下操作简化表达式:

sed -i -e 's/abc\-wxyz1\/2222\ \([0-9]\+\)/*/g' input.txt

如果要使用标志
-i,--in-place
,则不必重定向输出。如预期的那样,替换已到位

但是,您可以通过以下操作简化表达式:

sed -i -e 's/abc\-wxyz1\/2222\ \([0-9]\+\)/*/g' input.txt

使用此命令查看筛选结果:

cat input.txt | sed 's/\(abc\-wxyz1\/2222\ [0-9]\+\)/\(abc\-wxyz1\/2222\ \*\)/g' 
试着用较短的图案在断裂的地方打洞

如果要运行其他命令,则只需要使用“-e”标志。你也可以这样做:

sed 'command;command2;{command3}'

使用此命令查看筛选结果:

cat input.txt | sed 's/\(abc\-wxyz1\/2222\ [0-9]\+\)/\(abc\-wxyz1\/2222\ \*\)/g' 
试着用较短的图案在断裂的地方打洞

如果要运行其他命令,则只需要使用“-e”标志。你也可以这样做:

sed 'command;command2;{command3}'

对于显示的输入示例,可以使用
awk

awk '{print $1 " *)"}' input.txt

对于显示的输入示例,可以使用
awk

awk '{print $1 " *)"}' input.txt

-i
标志在不同版本的sed上的工作方式不同。不同的平台使用不同的版本。你在哪个站台?Linux、Unix、Mac?尽管如此,鲁本斯的回答指出了你需要改变的第一件事。这是个好消息。linux版本往往是最容易使用的(在我看来)。仅供参考,“-e”是无用的,因为您只有一个命令要执行。您是否考虑过要求sed就地编辑stdin?在不同版本的sed上,
-i
标志的工作方式不同。不同的平台使用不同的版本。你在哪个站台?Linux、Unix、Mac?尽管如此,鲁本斯的回答指出了你需要改变的第一件事。这是个好消息。linux版本往往是最容易使用的(在我看来)。仅供参考,“-e”是无用的,因为您只有一个命令要执行。您是否考虑过您要求sed就地编辑stdin?
-i
在不同版本的sed上的工作方式不同。有时必须指定备份扩展名。有时候你不需要。。。取决于sed的版本。@jahroy我不知道;谢谢你的信息。然而,没有必要对文件进行
cat
或重定向输出——以防他的版本将
-i
解释为就位。是的,你说得对:重定向是他需要解决的第一件事。我想我会提到
-I
这件事,以防下一期出现;-)。。。但是您需要指定一个文件名,而不是来自()的管道
cat
-i
在不同版本的sed上的工作方式不同。有时必须指定备份扩展名。有时候你不需要。。。取决于sed的版本。@jahroy我不知道;谢谢你的信息。然而,没有必要对文件进行
cat
或重定向输出——以防他的版本将
-i
解释为就位。是的,你说得对:重定向是他需要解决的第一件事。我想我会提到
-I
这件事,以防下一期出现;-)。。。但是您需要指定一个文件名,而不是从()
cat
指定管道。