gpt4 book ai didi

linux - tr 相当于 Linux 命令来替换字符串而不编辑文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:57 25 4
gpt4 key购买 nike

tr 是一个替换单个字符的命令,但我正在寻找一个命令行解决方案来替换日志文件中的 \001 和 | 以提高行的可读性。我不想使用修改日志文件的命令来编辑文件。

输入:FIX.4.2\0019=64\00135=0\00134=363

预期输出:FIX.4.2|9=64|35=0|34=363

最佳答案

使用 sed 是完成这项工作的明显方法。它不会覆盖输入文件,除非您告诉它这样做。

我想你可以使用 awk;与使用 sed 相比,它会(有点)难写。您也可以使用 Perl 或 Python。但是 sed 将“无需编辑文件即可替换字符串”写入其工作标题中 — 覆盖内容是最近添加到非标准版本的 sed(最近的意思是大约 1990 年以来)。

这个命令应该可以完成工作——而且它也是简洁的符号!

sed 's/\\001/|/g'       

but my understanding is it replaces the existing log file.

否 — sed 不会替换现有的日志文件。 GNU sed 和 BSD (macOS) sed 都有 -i 标志允许你覆盖输入文件——但是语义他们的 -i 标志略有不同。但是,默认情况下,sed 编辑输入流(它的名称是“stream editor”的缩写)并写入标准输出。你必须告诉它覆盖输入。

awk 等价物比 sed 长:

awk '{gsub(/\\001/, "|"); print}'

其中(如果您更喜欢简洁而不是清晰)可以简化为:

awk '{gsub(/\\001/, "|")} 1'

Perl 也非常紧凑:

perl -pe 's/\\001/|/g'

为了完整起见,此作业的 Python 2.7 脚本可以是:

#!/usr/bin/env python

import re
import fileinput

match = re.compile(r'\\001')

for line in fileinput.input():
line = re.sub(match, '|', line)
print line,

(请参阅 fileinputreprint 了解语法详细信息——尾随逗号确实很重要。)

Python 3.x 中的等价物非常相似:

#!/usr/bin/env python3

import re
import fileinput

match = re.compile(r'\\001')

for line in fileinput.input():
line = re.sub(match, '|', line)
print(line, end='')

(请参阅 fileinputreprint 了解更多信息。请注意,print()print 是 Python 2 之间最大的差异之一和 Python 3.)

可能有更好的方法来编写 Python 代码。不过,它似乎有效。

关于linux - tr 相当于 Linux 命令来替换字符串而不编辑文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com