mymedia Asked:2020-02-26 02:14:24 +0000 UTC2020-02-26 02:14:24 +0000 UTC 2020-02-26 02:14:24 +0000 UTC 处理文本文件中的特定行 772 在所有偶数行的其中一个文本文件中,将行的第一个单词移动到行尾。只包含一个词的行不会被修改。 -在其中一个文本文件中,删除以减号结尾的第二行。 使用 awk 以外的 head、tail、sed、pr 等命令。不要使用多个帮助文件。作为最后的手段,您可以使用 justification justification for、while 等结构。 linux 1 个回答 Voted Best Answer mymedia 2020-02-26T02:14:24Z2020-02-26T02:14:24Z sed -i 'n;s/\(\w\+\)\W*\(.\+\)/\2 \1/' file.txt 这个 sed 脚本由两个命令组成(好吧,当然有很多斜杠),并且是这样执行的: 该实用程序从第一行开始工作(结果很奇怪)。 第一条命令适用于它。n— 显示当前行并移动到下一行。 然后处理第二(偶数)行。s/.../\2 \1/- 用正则表达式替换。 正则表达式中有两个捕获组(在括号中,前面是反斜杠)。\w\+匹配字符串中的第一个单词, .\+匹配字符串的其余部分。在这些组之间存在\W*- 意味着单词之间的一组分隔符。 替换字符串以相反的顺序提及组号以交换单词。 然后 sed 移动到下一行(恰好是奇数行)并再次执行脚本。 sed -i '2{/-$/d}' file.txt 与前一个脚本不同,此脚本以应用命令的地址(行号)开头。反过来,该命令是一个新的命令块 - 可以说是一个下标 - 它也以一个地址开头 - 一个正则表达式。这一次,正则表达式更简单,它检查字符串末尾是否有减号。然后是“删除”命令 - 只是d 所有命令和语法都可以在sed(1)手册中找到。
sed -i 'n;s/\(\w\+\)\W*\(.\+\)/\2 \1/' file.txt这个 sed 脚本由两个命令组成(好吧,当然有很多斜杠),并且是这样执行的:
n— 显示当前行并移动到下一行。s/.../\2 \1/- 用正则表达式替换。\w\+匹配字符串中的第一个单词,.\+匹配字符串的其余部分。在这些组之间存在\W*- 意味着单词之间的一组分隔符。sed -i '2{/-$/d}' file.txt与前一个脚本不同,此脚本以应用命令的地址(行号)开头。反过来,该命令是一个新的命令块 - 可以说是一个下标 - 它也以一个地址开头 - 一个正则表达式。这一次,正则表达式更简单,它检查字符串末尾是否有减号。然后是“删除”命令 - 只是
d所有命令和语法都可以在sed(1)手册中找到。