如何在Bash中从文本文件提取动态端口号?
可靠提取动态端口号的Shell命令方案
针对Forwarded port XXXXX格式的行
如果原文件中存在以Forwarded port 开头、后跟端口号的行,可使用以下命令提取:
grep 实现:
grep -o 'Forwarded port [0-9]*' originalfile.txt | grep -o '[0-9]*' > newfile.txt逻辑:先匹配包含目标前缀和数字的行,再单独提取其中的数字部分。
sed 实现:
sed -n 's/^Forwarded port \([0-9]*\)$/\1/p' originalfile.txt > newfile.txt逻辑:精准匹配以
Forwarded port开头、仅后跟数字的行,捕获数字并输出。
针对The port is XXXXX and it will expire on...格式的行
这行上下文更明确,推荐优先使用以下方案:
grep 实现:
grep -o 'The port is \([0-9]*\) and it will expire' originalfile.txt | grep -o '[0-9]*' > newfile.txtsed 实现:
sed -n 's/.*The port is \([0-9]*\) and it will expire.*/\1/p' originalfile.txt > newfile.txt逻辑:匹配包含完整目标上下文的任意行,捕获中间的端口数字并输出,完全不依赖行号位置。
以上命令的核心优势是基于文本内容匹配而非固定行号,只要原文件中的上下文格式不变,就能稳定提取端口号,避免行号变动导致的提取失败。
内容的提问来源于stack exchange,提问作者cliny
相关产品推荐
相关产品推荐

