使用 sed 跳过一行的一部分
Posted
技术标签:
【中文标题】使用 sed 跳过一行的一部分【英文标题】:Skipping a part of a line using sed 【发布时间】:2021-02-03 11:28:47 【问题描述】:我有一个内容像这样的文件 - @1: 00001109
每一行都是相同的格式。我希望最终输出为@1: 00 00 11 09
。
我在 sed 中使用命令每 2 个字符引入一个空格 - sed 's/.\2\/& /g'
。但这也会给我在冒号之前的部分留出空格,这是我想避免的。谁能建议如何进行?
【问题讨论】:
【参考方案1】:如果perl
恰好是您的选择,那么:
perl -pe '1 while s/(\d+)(\d\d)/$1 $2/g' file
【讨论】:
【参考方案2】:你可以使用纯 bash:
for line in "$(<your_file.txt)"; do
first=`echo $line | cut -d' ' -f1`" "
last=`echo $line | cut -d' ' -f2`
for char in `seq 0 2 $#last`; do
first+=$last:$char:2" "
done;
done;
【讨论】:
【参考方案3】:这可能对你有用(GNU sed):
sed 's/[0-9][0-9]\B/& /g' file
在单词中的一对数字之后,插入一个空格。
【讨论】:
【参考方案4】:您能否尝试使用所示示例进行以下、编写和测试。
awk 'gsub(/../,"& ",$2);sub(/ +$/,"") 1' Input_file
解释:首先全局替换每个具有相同值的 2 位数字对,方法是向其附加空格,其中 gsub
是全局替换以全局执行)。完成此操作后,使用单个 sub
将最后出现的空格替换为 NULL,以避免行末出现空格。
sed
:
sed -E 's/[0-9]2/& /g;s/ +$//' Input_file
解释: 将每对数字全局替换为相同的值并附加空格。然后用 NULL 替换行的最后一个空格(由先前的替换添加)的空格。
【讨论】:
你能解释一下它是如何跳过冒号之前的部分的吗?我没有完全理解。 @Nibhrit,当然,你的字符串@1: 00001109
是空格分隔的,awk
默认字段分隔符是空格,所以你的数字部分出现在第二个字段中,我只在第二个字段中执行替换因此第一个带有冒号的字段永远不会受到影响,如果有更多疑问,请告诉我,干杯。以上是关于使用 sed 跳过一行的一部分的主要内容,如果未能解决你的问题,请参考以下文章