如何将文件的每一行填充到一定的宽度(比如63个字符宽),如果需要填充空格?
现在,让我们假设所有行都保证少于63个字符。
我使用vim并且更喜欢在那里进行操作(是否有某种printf %63s current_line
命令?)我可以在其中选择我想要应用填充的行。
但是,我当然愿意使用sed,awk或某种linux工具来完成这项工作。
欢呼声。
答案 0 :(得分:31)
vim
:%s/.*/\=printf('%-63s', submatch(0))
答案 1 :(得分:23)
awk '{printf "%-63s\n", $0}' testfile > newfile
答案 2 :(得分:7)
在Vim中,我会使用命令
:%s/$/\=repeat(' ',64-virtcol('$'))
如果要填充的文本仅为ASCII且不包含制表符,则为
可以使用col()
代替virtcol()
。
答案 3 :(得分:1)
这可能对您有用:
sed -i ':a;/.\{63\}/!{s/$/ /;ba}' file
或者更有效但不那么优雅:
sed -i '1{x;:a;/.\{63\}/!{s/^/ /;ba};x};/\(.\{63\}\).*/b;G;s//\1/;y/\n/ /' file
答案 4 :(得分:1)
只是为了好玩,Perl版本:
perl -lpe '$_ .= " " x (63 - length $_)'
答案 5 :(得分:1)
使用sed,无循环:
sed -i '/.\{63\}/!{s/$/ /;s/^\(.\{63\}\).*/\1/}' file
确保第一次替换中有足够的空格以匹配您要添加的空格数。
答案 6 :(得分:0)
另一个Perl解决方案:
perl -lne 'printf "%-63s\n", $_' file
答案 7 :(得分:0)
使用vim看起来很舒服,但是这里是一个纯Bash / sed-sed解决方案,以防您需要从命令行进行操作(请注意sed替换中的63个空格):
sed 's/$/ /' yourFile.txt |cut -c 1-63