Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如果一行的一部分与sed匹配,则用数字替换该行_Linux_Shell_Sed - Fatal编程技术网

Linux 如果一行的一部分与sed匹配,则用数字替换该行

Linux 如果一行的一部分与sed匹配,则用数字替换该行,linux,shell,sed,Linux,Shell,Sed,我知道这是一个非常简单的问题,已经讨论过很多次了,但我不明白我在指挥上哪里做错了 我想替换以99999开头的行。每行以几个空格开始 infile.txt 3 2 3 4 It is not a number = /home/kayan/data 3 5 It is not a number = /home/kayan/data 4 5 我曾经 sed -i 's/^I/99999/g' infile.txt

我知道这是一个非常简单的问题,已经讨论过很多次了,但我不明白我在指挥上哪里做错了

我想替换以99999开头的行。每行以几个空格开始

infile.txt
     3
     2
     3
     4
  It is not a number = /home/kayan/data
     3
     5
  It is not a number = /home/kayan/data
     4
     5
我曾经

sed -i 's/^I/99999/g' infile.txt

但它不起作用。

您要替换的只是^I部分,即第一个字母。改为使用^I.*来匹配整个剩余行,它也会被替换。

由于起始空间,请将其添加到模式搜索中

sed -i 's/^[[:blank:]]*I.*/99999/' infile.txt
使用change函数

sed -i '/^[[:blank:]]*I/ c\
9999' infile.txt
保持起始空间

sed -i 's/^\([[:blank:]]*\)I.*/\199999/' infile.txt
不需要g,每行只有一个可能的更改

试试看:

sed -i 's/^\s*It.*/9999/'

很抱歉每行也有空格。所以^I.*/99999只是在每行中添加了99999。它没有取代任何东西,肯特。这个很好用。我可以在这个命令中放一个format语句吗。因为在我的新文件中,很少有数据以几个空格开头,也很少有数据不以空格开头。@Kayan此行将替换以零个或更多空格开头的行,然后替换为9999,所以您不必关心行中有多少前导空格