【发布时间】:2021-02-03 11:28:47
【问题描述】:
我有一个内容像这样的文件 - @1: 00001109
每一行都是相同的格式。我希望最终输出为@1: 00 00 11 09。
我在 sed 中使用命令每 2 个字符引入一个空格 - sed 's/.\{2\}/& /g'。但这也会给我在冒号之前的部分留出空格,这是我想避免的。谁能建议如何进行?
【问题讨论】:
标签: regex linux awk sed scripting
我有一个内容像这样的文件 - @1: 00001109
每一行都是相同的格式。我希望最终输出为@1: 00 00 11 09。
我在 sed 中使用命令每 2 个字符引入一个空格 - sed 's/.\{2\}/& /g'。但这也会给我在冒号之前的部分留出空格,这是我想避免的。谁能建议如何进行?
【问题讨论】:
标签: regex linux awk sed scripting
如果perl 恰好是您的选择,那么:
perl -pe '1 while s/(\d+)(\d\d)/$1 $2/g' file
【讨论】:
你可以使用纯 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;
【讨论】:
这可能对你有用(GNU sed):
sed 's/[0-9][0-9]\B/& /g' file
在单词中的一对数字之后,插入一个空格。
【讨论】:
您能否尝试使用所示示例进行以下、编写和测试。
awk '{gsub(/../,"& ",$2);sub(/ +$/,"")} 1' Input_file
解释:首先全局替换每个具有相同值的 2 位数字对,方法是向其附加空格,其中 gsub 是全局替换以全局执行)。完成此操作后,使用单个 sub 将最后出现的空格替换为 NULL,以避免行末出现空格。
sed:
sed -E 's/[0-9]{2}/& /g;s/ +$//' Input_file
解释: 将每对数字全局替换为相同的值并附加空格。然后用 NULL 替换行的最后一个空格(由先前的替换添加)的空格。
【讨论】:
@1: 00001109 是空格分隔的,awk 默认字段分隔符是空格,所以你的数字部分出现在第二个字段中,我只在第二个字段中执行替换因此第一个带有冒号的字段永远不会受到影响,如果有更多疑问,请告诉我,干杯。