我有一个文本文件,正在尝试对其进行整理,其中有如下字符:
abcd a27382 ESH738 991839
ahsj dhaksj GSH736 774828
ahsj dhaksj RHA330
ahsj dhaksj GSH736 774828
我的问题是,如何在所有行右侧的最后一组数字后插入 3 个空格,而记事本在到达最后一个数字末尾时不执行回车?
我需要对超过 40,000 行执行此操作,因此手动按下每行末尾的空格键来添加这 3 个额外空格是不可能的。此外,在没有数字的地方(例如,第 3 行),我仍然需要那些额外的空格来弥补缺失的数字,在这种情况下,它将是 9 个空格(6 个用于不存在的数字,3 个用于最后的空格)。如果您知道任何简单的方法可以做到这一点,请告诉我,因为这将非常有帮助,谢谢!
答案1
使用 Notepad++ 可以执行两个基于正则表达式的替换,这些替换将用空格填充所有行,然后将所有行修剪为相同的长度。我还没有针对 40,000 行文件测试过此技术的性能。
第一次替换将在文本右侧添加空格:
在替换选项卡中设置“正则表达式”,并确保“匹配换行符”和“环绕”已关闭。^(.*)
在“查找内容”中输入表示匹配行上所有内容的文本,$1
然后输入要添加的空格数(在您的示例中,添加 9)。
单击“替换”后,所有行都应至少具有所需的长度,并且许多行将比您想要的长。
第二次替换,即修剪。
对于第二次替换,我们将抓取两个部件到生产线上并扔掉其中一个。
首先确保“替换为”$1
中只有 ,后面没有空格。然后将“查找内容”更改为^(.{28})(.*)
从行首开始查找前 28 个字符(更改为 31 个以保留 3 个空格作为填充)到第一组中,然后将该行上的其他所有内容到第二组中。
当将其与“替换”一起应用时,它应该将所有线条修剪为相同的长度。
注意:某些正则表达式引擎可能需要$
在使用此技术时附加“行尾”。
答案2
这取决于你是否正在写入原始文件。如果你正在创建此文件,你可以printf
像这样使用
printf "%s " "your_string_of_text"
printf
有许多格式选项可供您使用。但如果您正在编辑文件,sed
它将为您提供良好的服务
sed 's/^.*$/&\ \ \ /g' some_file > some_other_file
这将在 中每行末尾添加 3 个空格some_file
,并将输出写入some_other_file
。请注意,空格已转义,而 & 符号用于将第一个模式写入输出。