我有包含以下信息的文件

$ cat test.txt
Studentename:Ram
rollno:12
subjects:6
Highest:95
Lowest:65
Studentename:Krish
rollno:13
subjects:6
Highest:90
Lowest:45
Studentename:Sam
rollno:14
subjects:6
Highest:75
Lowest:65

我正在尝试单例学生的地点信息。
即我的输出应该是
Studentename:Ram rollno:12 subjects:6 Highest:95 Lowest:65
Studentename:Krish rollno:13 subjects:6 Highest:90 Lowest:45
Studentename:Sam rollno:14 subjects:6 Highest:75 Lowest:65.

下面是我写的命令
cat test.txt | tr "\n" " " | sed 's/Lowest:[0-9]\+/Lowest:[0:9]\n/g'

上面的命令在正则表达式 Lowest:[0-9] 处换行,但它不打印模式。相反,它正在打印最低:[0-9]。

请帮忙

最佳答案

尝试:

$ sed '/^Studente/{:a; N; /Lowest/!ba; s/\n/ /g}' test.txt
Studentename:Ram rollno:12 subjects:6 Highest:95 Lowest:65
Studentename:Krish rollno:13 subjects:6 Highest:90 Lowest:45
Studentename:Sam rollno:14 subjects:6 Highest:75 Lowest:65

这个怎么运作
/^Studente/{...} 告诉 sed 只在以 Studente 开头的行上执行花括号内的命令。这些命令是:
  • :a
    这定义了一个标签 a
  • N
    这将读取下一行并将其附加到模式空间。
  • /Lowest/!ba
    如果当前模式空间不包含 Lowest ,这会告诉 sed 分支回到标签 a

    更详细地说,如果该行包含 /Lowest/ ,则 Lowest 为真。在 sed 中,! 是否定的,所以 /Lowest/! is true if the line does not contain Lowest . In ba , the b stands for the branch command and a` 是要分支到的标签。
  • s/\n/ /g
    这告诉 sed 用空格替换所有换行符。
  • 10-08 05:10