如何在FreeBSD的tcsh Shell中使用BSD Sed剥离IP地址
FreeBSD tcsh下提取域名的sed解决方案
要从格式为0.0.0.0 域名的文件中提取域名,Linux发行版的sed命令在FreeBSD tcsh中无法直接使用,核心差异在于两者sed的正则语法和选项行为:
- FreeBSD sed不支持Linux的
-r扩展正则选项,对应的扩展正则选项是-E - FreeBSD sed的
-i(原地编辑)选项必须指定备份后缀,若不需要备份需显式传入空字符串(tcsh中要用引号包裹空字符串避免语法错误)
方案一:使用扩展正则(推荐)
sed -Ei '' 's/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ (.*)$/\1/' domains.txt
-E:开启扩展正则,无需转义+、()等字符-i '':原地编辑文件且不生成备份- 正则部分:匹配行首的IP地址,捕获后续的域名并替换整行为捕获内容(每行仅一个匹配,无需
/g标志)
方案二:使用基础正则
若不想用扩展正则,需对基础正则中的特殊字符转义:
sed -i '' 's/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+ \(.*\)$/\1/' domains.txt
- 这里
\+、\(、\)是基础正则的转义写法,功能与扩展正则一致
补充说明
- 若需要保留原文件备份,可将
-i ''改为-i.bak,执行后会生成domains.txt.bak备份文件 - tcsh中使用单引号包裹sed脚本,避免shell解析正则中的特殊字符(如
$、*)
内容的提问来源于stack exchange,提问作者npr_se
相关产品推荐
相关产品推荐

