sed ‘/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//’ a.txt
时间: 2023-08-28 16:20:12 浏览: 149
这是一个 sed 命令,用于在 a.txt 文件中每两行之间交换位置。具体解释如下:
1. `/ \n /!G`:匹配不包含换行符的行,并将其追加到模式空间中的最后一行。
2. `s/ \(.\) \(.*\n\) /&\2\1/`:将模式空间中的两行分别用正则表达式中的两个子表达式重新排列,& 表示匹配的整个字符串。
3. `//; D`:如果模式空间中有两行,就执行上一步的操作并跳到脚本的开头重新执行,否则删除模式空间中的第一行并开始新一轮的处理。
4. `s/.//`:删除模式空间中剩余的字符。
总之,该命令的作用是在 a.txt 文件中每两行之间交换位置。
相关问题
sed -E -i 's@/\*([^*]|(\*+[^*/]))*\*+/@\n@g; s@\n[[:blank:]]*//.*$@@g; /^$/d' file.c 让这个命令支持忽略todo的大小写
要让这个命令支持忽略todo的大小写,可以在每个todo的正则表达式中添加一个忽略大小写的标记。可以通过在正则表达式开头添加 "(?i)" 来实现这个功能。所以,修改后的命令应该是:
```
sed -E -i 's@/\*([^*]|(\*+[^*/]))*\*+/@\n@g; s@\n[[:blank:]]*//.*$@@g; /^$/d; s@(?i)todo@TODO@g' file.c
```
其中的 "s@(?i)todo@TODO@g" 表示将所有大小写形式的 "todo" 替换为 "TODO",并且忽略大小写。
详细解释一下sed -n '/<\/>/ { x; s/\n//g; p; } /<\/>/! { H; }' input.txt > output.txt
这是一个使用sed命令的命令行,用于处理名为"input.txt"的输入文件,并将处理结果输出到名为"output.txt"的输出文件中。
这个命令使用了两个正则表达式来匹配输入文件的每一行:
1. `/<\/>/ { x; s/\n//g; p; }`:匹配包含"<\/>"的行,然后执行命令块中的操作。这个命令块中的操作分为三个部分:将模式空间中的内容交换到保持空间中(x命令),删除模式空间中的换行符(s命令),将模式空间中的内容输出(p命令)。
2. `/<\/>/! { H; }`:匹配不包含"<\/>"的行,并将这些行添加到保持空间中(H命令)。
整个命令的作用是从输入文件中提取出包含"<\/>"的行,并将这些行中的换行符删除后输出到输出文件中。而不包含"<\/>"的行则被忽略。
阅读全文