如何在管道中使用 sed

  • 本文关键字:sed 管道 bash sed
  • 更新时间 :
  • 英文 :


我有文件,我需要替换其中的一个单词。我可以在许多 grep 和管道中找到这个词。

cat file | <many times grep here> 

例如:

>> cat test.cpp | grep -o "--window [0-9]* "" | grep -o "[0-9]*" 
>> 71303214

如何更改此管道中的结果编号?

您可以使用前瞻和后视,如下所示:

grep -Po '(?<=--window )d*(?= ")' file

它查找(d*)--window_块和_"块之间的数字(_代表空格)。

如果要替换为 sed,请使用:

sed 's/--window ([0-9]*) "/1/g' file

它寻找--window_digits_*并用digits替换它们(_代表空间)。

更新

如果要将其替换为另一个数字,请执行以下操作:

sed 's/--window [0-9]* "/new_number/g' file

或者,如果您使用双引号,您甚至可以使用 bash 变量(使用单引号,它不会扩展变量)。

sed "s/--window [0-9]* "/$new_number/g" file

测试

$ cat a
hello --window 234234 " a
hello --window 234234a " a
hello this is another thing

$ grep -Po '(?<=--window )d*(?= ")' a
234234
$ sed 's/--window ([0-9]*) "/1/g' a
hello 234234 a
hello --window 234234a " a
hello this is another thing
$ sed 's/--window [0-9]* "/XXX/g' a
hello XXX a
hello --window 234234a " a
hello this is another thing
$ number=22
$ sed "s/(--window )[0-9]*( ")/1$number2/g" a
hello --window 22 " a
hello --window 234234a " a
hello this is another thing
sed -n '/--window [0-9]* "/ {
   s/[^[:digit:]]//gp
   }' file
  • sed 以文件作为输入(因此之前不需要 cat 管道)
  • 使用 -n 表示除非特定请求,否则不打印输出(命令中的 P)
  • //之间的第一种模式(正则表达式减少,因此您需要转义一些元字符,例如 \/。 *)
  • (这里)通过删除行的其他字符来提取数字,如果发生,则打印结果

如您所见,grep 在这种情况下更好(更易读和高效)

我认为你所要求的只是:

$ cat file
#define CLICK(x,y) system("xdotool mousemove --window 71303214 " #x" "#y " click 1");
$ var="888999"; sed "s/(.*--window )[^ ]*/1$var/" file
#define CLICK(x,y) system("xdotool mousemove --window 888999 " #x" "#y " click 1");

如果不是这样,请更新您的问题以显示一些具有代表性的示例输入和预期输出。

相关内容

  • 没有找到相关文章

最新更新