BASH自动完成空白,直到与价值

问题描述:

IM需要帮助的下一行: 我有一个这样具有输出文件:BASH自动完成空白,直到与价值

001 value 
    value 
045 value 
    value 
    value 
068 value  
098 value 
    value 

我需要一个命令来获得类似这样的输出:

001 value 
001 value 
045 value 
045 value 
045 value 
068 value 
098 value 
098 value 
+0

问题中的格式不正确。他们是分开的线......如: “001值” “值” – Deeshey

+0

对不起,即时通讯与本网站新,我不知道如何格式化线。我认为现在是好的。谢谢。 – Deeshey

很容易的与awk

awk '/^[0-9]/{prefix=$1;$1=""}{sub(/^ +/,"");print prefix,$0}' test.in 

这适用于任何前缀从一个数字开始。


原始bash字符串操作。比sed更容易理解,但硬编码有3个字符,不一定是数字,前缀。

while IFS= read -r line; do 
    if [[ "${line:0:3}" != " " ]]; then 
     prefix="${line:0:3}" 
    fi 
    printf '%s%s\n' "$prefix" "${line:3}" 
done < test.in 

这也可以用做sed,虽然它比一般的sed命令稍微更复杂。它假设3位数的前缀。
-E适用于BSD sed;如果您使用的是GNU sed,则应将其替换为-r

sed -E '/^[0-9]{3} /{h 
s/(...).*/\1/ 
x 
n 
} 
G 
s/...(.*)\n(.*)/\2\1/ 
' file.txt