Sed 将所有数字替换为一个值,但带空格的图案除外

Sed 将所有数字替换为一个值,但带空格的图案除外,sed,Sed,我有一个这种类型的txt文件: 360 181 363 -100 40 .... 360 181 5 3 15 .... 特别是,这是从grib2文件中提取的,“360 181”行基本上是值的标题,它告诉我有360*181个值(这是一个网格文件)。这是一个包含许多字段的grib2文件,因此,它们由许多“360 181”行分隔,每个变量一行 我必须用标志值9.9990003E+20替换除“360 181”行之外的所有值(我必须创建一个缺少值的grib文件) 我已经试了一段时间了,但是我被卡住了

我有一个这种类型的txt文件:

360 181
363
-100
40
....
360 181
5
3
15
....
特别是,这是从grib2文件中提取的,“360 181”行基本上是值的标题,它告诉我有360*181个值(这是一个网格文件)。这是一个包含许多字段的grib2文件,因此,它们由许多“360 181”行分隔,每个变量一行

我必须用标志值9.9990003E+20替换除“360 181”行之外的所有值(我必须创建一个缺少值的grib文件)

我已经试了一段时间了,但是我被卡住了

我的努力是:

 sed ’s/[^360 181]/[0-9]*/9.9990003E+20/‘ <in.txt >out.txt
 sed ’s/[^\<360 181\>]/[0-9]*/9.9990003E+20/‘ <in.txt >out.txt
sed's/[^360 181]/[0-9]*/9.9990003E+20/'out.txt
sed's/[^\]/[0-9]*/9.9990003E+20/'out.txt
但我一直不成功


可能有一个答案,所以,我已经广泛搜索,但有很多SED问题。如果这是一个复制,抱歉,请告诉我答案

我搜索了只包含带可选负号的数字的行,并将其替换为所需的数字

$ cat in
360 181
363
-100
40
360 181
5
3
15
指令


我搜索了只包含带可选负号的数字的行,并将其替换为所需的数字

$ cat in
360 181
363
-100
40
360 181
5
3
15
指令


我认为您可以匹配所有没有空格的行:

sed 's/^[^ ]\+$/9.9990003E+20/'

我认为您可以匹配所有没有空格的行:

sed 's/^[^ ]\+$/9.9990003E+20/'

OP解决方案尝试的更正版本:

sed '/^360 181$/! s/^.*$/9.9990003E+20/' <in.txt >out.txt
  • […]
    是一个括号表达式,用于字符集(多个字符(字符类/范围),其中任何一个字符与单个输入字符匹配),而不是用于匹配字符串

    • 顺便说一句:括号表达式开头的
      ^
      将否定以下字符-这与
      ^
      作为线锚开头的用法不同
  • s//
    函数只接受两个参数:要匹配的正则表达式和替换匹配字符串的内容


OP解决方案尝试的更正版本:

sed '/^360 181$/! s/^.*$/9.9990003E+20/' <in.txt >out.txt
  • […]
    是一个括号表达式,用于字符集(多个字符(字符类/范围),其中任何一个字符与单个输入字符匹配),而不是用于匹配字符串

    • 顺便说一句:括号表达式开头的
      ^
      将否定以下字符-这与
      ^
      作为线锚开头的用法不同
  • s//
    函数只接受两个参数:要匹配的正则表达式和替换匹配字符串的内容


我选择这个作为答案,因为它非常完整。谢谢你对括号的解释。我选择这个作为答案,因为它非常完整。谢谢你对括号的解释。
# BROKEN COMMANDS
sed 's/[^360 181]/[0-9]*/9.9990003E+20/' <in.txt >out.txt
sed 's/[^\<360 181\>]/[0-9]*/9.9990003E+20/' <in.txt >out.txt