我有文件,我需要替换其中的一个单词。我可以在许多 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");
如果不是这样,请更新您的问题以显示一些具有代表性的示例输入和预期输出。