使用 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 跳过一行的一部分的主要内容,如果未能解决你的问题,请参考以下文章

sed:替换一行的一部分

使用sed命令跳过页脚和标题

sed 在一行中加入一些字符,这一行中的前面部分是随机生成的不能动,只是在最后加入一个值

sed

sed

sed命令使用范例