删除月、年之后的所有文本
Delete all text after Month,Year
我正在尝试通过解析 ietf RFC index 来生成 RFC 的简短描述列表。我希望有一些命令可以达到 curl https://www.ietf.org/download/rfc-index.txt | sed 'magic' | awk 'more magic' | cut -f ?
的效果
命令 curl https://www.ietf.org/download/rfc-index.txt
的未解析输出如下所示:
6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.
September 2012. (Format: TXT, HTML) (Status: INFORMATIONAL) (DOI:
10.17487/RFC6708)
6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
Aboba, Ed., S. Cheshire. September 2012. (Format: TXT, HTML)
(Status: INFORMATIONAL) (DOI: 10.17487/RFC6709)
6710 Simple Mail Transfer Protocol Extension for Message Transfer
Priorities. A. Melnikov, K. Carlberg. August 2012. (Format: TXT,
HTML) (Status: PROPOSED STANDARD) (DOI: 10.17487/RFC6710)
6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
Johansson. August 2012. (Format: TXT, HTML) (Status: INFORMATIONAL)
(DOI: 10.17487/RFC6711)
我希望在年月得到的输出可以去掉多余的注释:
6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.
6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
Aboba, Ed., S. Cheshire.
6710 Simple Mail Transfer Protocol Extension for Message Transfer
Priorities. A. Melnikov, K. Carlberg.
6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
Johansson.
如果所有条目的结构都像您显示的那样一致,您甚至不需要明确匹配年份或月份,但您可以依赖于如何分隔要删除的所有部分。
以下命令适用于您的输入:
sed -zE 's/[^.]+\.[ \n]+\([^)]+\)[ \n]+\([^)]+\)[ \n]+\([^)]+\)//g' yourfile
本质上,它匹配最后(也是唯一)三个带括号的文本 (\([^)]+\)
),以及它们之前的最后一个点终止字符串 ([^.]+\.
)。它允许这三个成分由空格分隔 and/or 换行符 ([ \n]+
).
此外,使用 -z
选项,sed
将输入文件视为单行。 -E
是使用 +
而不是 \+
来表示 1 或更多 (代价是必须写 \(
和 \)
以匹配文字括号)。
这使用 sed
命令:
sed -r 's/^(.*)(January|February|March|April|May|June|July|August|September|October|November|December) [[:digit:]]{4}(.*)$//'
只需通过管道 curl
即可。
一些细节:
-r
:使用"Extended regular expressions"
- 捕获第一组中“$month $year”之前的输出数据(用括号表示)
- 在第二组中捕获“$month $year”。
- 占领第三组剩下的人。
- 只输出第一组(
</code>)</li>
</ul>
<p>这是关于 <a href="https://www.grymoire.com/Unix/Sed.html" rel="nofollow noreferrer"><code>sed
的部分,来自 Bruce Barnett 的命令行工具经典系列。
我正在尝试通过解析 ietf RFC index 来生成 RFC 的简短描述列表。我希望有一些命令可以达到 curl https://www.ietf.org/download/rfc-index.txt | sed 'magic' | awk 'more magic' | cut -f ?
命令 curl https://www.ietf.org/download/rfc-index.txt
的未解析输出如下所示:
6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.
September 2012. (Format: TXT, HTML) (Status: INFORMATIONAL) (DOI:
10.17487/RFC6708)
6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
Aboba, Ed., S. Cheshire. September 2012. (Format: TXT, HTML)
(Status: INFORMATIONAL) (DOI: 10.17487/RFC6709)
6710 Simple Mail Transfer Protocol Extension for Message Transfer
Priorities. A. Melnikov, K. Carlberg. August 2012. (Format: TXT,
HTML) (Status: PROPOSED STANDARD) (DOI: 10.17487/RFC6710)
6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
Johansson. August 2012. (Format: TXT, HTML) (Status: INFORMATIONAL)
(DOI: 10.17487/RFC6711)
我希望在年月得到的输出可以去掉多余的注释:
6708 Application-Layer Traffic Optimization (ALTO) Requirements. S.
Kiesel, Ed., S. Previdi, M. Stiemerling, R. Woundy, Y. Yang.
6709 Design Considerations for Protocol Extensions. B. Carpenter, B.
Aboba, Ed., S. Cheshire.
6710 Simple Mail Transfer Protocol Extension for Message Transfer
Priorities. A. Melnikov, K. Carlberg.
6711 An IANA Registry for Level of Assurance (LoA) Profiles. L.
Johansson.
如果所有条目的结构都像您显示的那样一致,您甚至不需要明确匹配年份或月份,但您可以依赖于如何分隔要删除的所有部分。
以下命令适用于您的输入:
sed -zE 's/[^.]+\.[ \n]+\([^)]+\)[ \n]+\([^)]+\)[ \n]+\([^)]+\)//g' yourfile
本质上,它匹配最后(也是唯一)三个带括号的文本 (\([^)]+\)
),以及它们之前的最后一个点终止字符串 ([^.]+\.
)。它允许这三个成分由空格分隔 and/or 换行符 ([ \n]+
).
此外,使用 -z
选项,sed
将输入文件视为单行。 -E
是使用 +
而不是 \+
来表示 1 或更多 (代价是必须写 \(
和 \)
以匹配文字括号)。
这使用 sed
命令:
sed -r 's/^(.*)(January|February|March|April|May|June|July|August|September|October|November|December) [[:digit:]]{4}(.*)$//'
只需通过管道 curl
即可。
一些细节:
-r
:使用"Extended regular expressions"- 捕获第一组中“$month $year”之前的输出数据(用括号表示)
- 在第二组中捕获“$month $year”。
- 占领第三组剩下的人。
- 只输出第一组(
</code>)</li> </ul> <p>这是关于 <a href="https://www.grymoire.com/Unix/Sed.html" rel="nofollow noreferrer"><code>sed
的部分,来自 Bruce Barnett 的命令行工具经典系列。