linux - 替换 sed 命令文本内联

标签 linux bash sed replace

我有这个文件

文件.txt

<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90e5fefbfeffe7fed0fdf1f9fcbef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>||<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6b3a8ada8a9b1a886aba7afaae8a5a9ab" rel="noreferrer noopener nofollow">[email protected]</a>||
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="65100b0e0b0a120b2508040c09574b060a08" rel="noreferrer noopener nofollow">[email protected]</a>||<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d4a1babfbabba3ba94b9b5bdb8e6fab7bbb9" rel="noreferrer noopener nofollow">[email protected]</a>||
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e99c878287869e87a984888085dac78a8684" rel="noreferrer noopener nofollow">[email protected]</a>||<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="186d767376776f7658757971742b367b7775" rel="noreferrer noopener nofollow">[email protected]</a>||
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c5b0abaeabaab2ab85a8a4aca9f1eba6aaa8" rel="noreferrer noopener nofollow">[email protected]</a>||<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="592c373237362e3719343830356d773a3634" rel="noreferrer noopener nofollow">[email protected]</a>||
unknownpass
unknownpass2
unknownpass3
unknownpass4

如何使用 sed 命令获取此信息:

<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="aedbc0c5c0c1d9c0eec3cfc7c280cdc1c3" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="097c676267667e674964686065276a6664" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass|
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="f3869d989d9c849db39e929a9fc1dd909c9e" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass2|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c9bca7a2a7a6bea789a4a8a0a5fbe7aaa6a4" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass2|
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0f7a6164616078614f626e66633c216c6062" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass3|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="22574c494c4d554c624f434b4e110c414d4f" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass3|
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d5a0bbbebbbaa2bb95b8b4bcb9e1fbb6bab8" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass4|<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d48535653524a537d505c545109135e5250" rel="noreferrer noopener nofollow">[email protected]</a>|unknownpass4|

最佳答案

这可能对你有用(GNU sed):

sed ':a;N;/\n[^|\n]*$/!ba;s/||\([^|]*\)||\(\n.*\)*\n\(.*\)$/|\3|\1|\3|\2/;P;D' file

将文件的第一部分放入模式空间和其中一个替换项中,替换、打印并删除第一行,然后重复。

关于linux - 替换 sed 命令文本内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43105508/

相关文章:

python - Linux Path环境变量--正确添加带空格的路径

linux - 放入 bash 脚本中时 sed 的行为不同

bash - 有没有办法获取匹配模式行的行号?

linux - awk + ​​从用双引号定义的行打印字段

linux - 使用变量用反斜杠替换文件中的行

regex - 使用 sed 获取文件的 IPv4 地址并使用前缀导出

regex - 如何用 tr 或 sed 命令替换 linux 中其他两个字符的空格?

c++ - 在不禁用 cout/cin 的情况下获取标准输出内容

linux shell脚本大小写参数输入

linux - 反馈两个进程的stdin和stdout