awk替换文本文件中的一行并保存它
我想打开一个包含500个IP地址列表的文本文件。我想对其中一行进行以下更改并保存文件。使用awk替换文本文件中的一行并保存它,awk,sed,Awk,Sed,我想打开一个包含500个IP地址列表的文本文件。我想对其中一行进行以下更改并保存文件。使用awk或sed可以这样做吗 当前行: 100.72.78.46:1900 变化: 100.72.78.46:1800 您可以通过以下方式实现这一点: sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt i选项将更新原始文件,并创建备份文件。这将仅编辑图案的第一个匹配项。如果要替换所有匹配的模式,请在最后一个/ 但是,这种解决方案(如注释中
awk
或sed
可以这样做吗
当前行:
100.72.78.46:1900
变化:
100.72.78.46:1800
您可以通过以下方式实现这一点:
sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt
i
选项将更新原始文件,并创建备份文件。这将仅编辑图案的第一个匹配项。如果要替换所有匹配的模式,请在最后一个/
但是,这种解决方案(如注释中所指出的)在许多其他情况下都会失败,例如72100372578146:190032
,它将转换为72100.72.78.46:180032
为了避免这种情况,您必须进行精确匹配,并且不将
视为特殊字符(请参阅):
其中[[[::]]
将为您提供精确匹配
最后,我还意识到,如果每行只有一个IP地址,还可以在行首和行尾使用特殊字符^$
,以防止错误替换:
sed -ie 's/^100\.72\.78\.46:1900$/100.72.78.46:1800/g' file.txt
您可以通过以下方式实现这一点:
sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt
i
选项将更新原始文件,并创建备份文件。这将仅编辑图案的第一个匹配项。如果要替换所有匹配的模式,请在最后一个/
但是,这种解决方案(如注释中所指出的)在许多其他情况下都会失败,例如72100372578146:190032
,它将转换为72100.72.78.46:180032
为了避免这种情况,您必须进行精确匹配,并且不将
视为特殊字符(请参阅):
其中[[[::]]
将为您提供精确匹配
最后,我还意识到,如果每行只有一个IP地址,还可以在行首和行尾使用特殊字符^$
,以防止错误替换:
sed -ie 's/^100\.72\.78\.46:1900$/100.72.78.46:1800/g' file.txt
关于操纵文本的任何“是否可以用awk这样做”问题的答案的可能重复是“是”。请阅读。关于操纵文本的任何“是否可以用awk这样做”问题的答案可能重复为“是”。请阅读。考虑到各种输入文件内容,该操作将失败。例如,它将
72100372578146:190032
转换为72100.72.78.46:180032
。查找/更改您想要的文本总是很容易的,但不查找/更改您不想要的文本却要困难得多。在给定一些小样本输入的情况下,生成您期望的输出的脚本是找到解决方案的起点,而不是终点。在发布示例输入/输出时,考虑您认为可能难以处理且不希望被发现/更改的案例非常重要,而不仅仅是一个晴天案例。是的,您完全正确。我将编辑我的回复,使其在更一般的意义上起作用。谢谢考虑到各种输入文件内容,该操作将失败。例如,它将72100372578146:190032
转换为72100.72.78.46:180032
。查找/更改您想要的文本总是很容易的,但不查找/更改您不想要的文本却要困难得多。在给定一些小样本输入的情况下,生成您期望的输出的脚本是找到解决方案的起点,而不是终点。在发布示例输入/输出时,考虑您认为可能难以处理且不希望被发现/更改的案例非常重要,而不仅仅是一个晴天案例。是的,您完全正确。我将编辑我的回复,使其在更一般的意义上起作用。谢谢