标签: sed

在一个大文本文件中进行多项搜索和替换操作

我有一个大文本文件(大约 2GB)。我想对同一个文件执行五次搜索和替换操作,并希望在一个命令中完成此操作。通常我使用 vim,打开文件,执行一个替换操作,然后执行下一个操作,等等。有一个问题,因为我注意到在三到四次搜索后 vim 由于内存问题而崩溃。

以下是我在 Vim 中使用的命令的两个示例:

:%s/www\.abcdef/www.test.abcdef/g 
:%s/www\.klmnop/www.test.klmnop/g
Run Code Online (Sandbox Code Playgroud)

处理这个问题的最佳方法是什么?

linux vim sed find-and-replace

11
推荐指数
2
解决办法
1万
查看次数

GNU sed (for Windows) 可以处理 Unicode 吗?如果是这样,它是代码页/区域设置问题还是开关?

我已经断断续续地使用 GNU SED 几年了。有时它让我感到有些困惑,但它做得很好......对于单字节字符集!
我时不时地注意到对 GNU SED 的引用是 Unicode 感知的,但我见过的最接近的是它的“二进制”模式……而二进制不是 Unicode。
GSED 能否以 CodePoint 分辨率处理 Unicode 文本文件,包括尤其是 \r\n (Windows)...如果可以,它是否需要 UTF-8、UTF-16 或什么?SED 如何检测编码?

windows encoding gnu unicode sed

10
推荐指数
1
解决办法
4887
查看次数

如何在 sed 中使用逐字字符串?

例如,

sed 's/string/ /g' where string="a\c:ti]\']x""/\//:`~$%#^&"'
Run Code Online (Sandbox Code Playgroud)

那是如何将字符串从字面上传递给 sed 而不是作为解释的正则表达式模式?

我将在 cygwin 和 ubuntu 上使用它,因此解决方案应该与环境兼容。

sed

10
推荐指数
1
解决办法
8073
查看次数

当我安装 coreutils port 时,Macports 在哪里安装 GNU sed?

当我安装 coreutils port 时,Macports 在哪里安装 GNU sed?我想在 Mac OS X 上使用 GNU sed 而不是 BSD sed。

macports sed

10
推荐指数
1
解决办法
3299
查看次数

除了最后 2 行,我怎样才能 cat/print 一个文件?

如何使用标准或 GNU shell 工具获取文本文件的内容,除了最后(例如)2 行?(bash、tail、cat 等等。)

unix bash awk sed sh

10
推荐指数
2
解决办法
1万
查看次数

仅替换 sed 中匹配模式的一部分

对于具有相同结构的数万行,我想(例如)从这里开始:

abcd 12345 qwerty asdfg
Run Code Online (Sandbox Code Playgroud)

...到这里:

abcd 12345,qwerty asdfg
Run Code Online (Sandbox Code Playgroud)

...和

sed 's/[0-9]\ [A-Z]/,/g'
Run Code Online (Sandbox Code Playgroud)

我可以匹配 rigth 空间加上其周围的字符 (5 q),但在替换中我得到(显然):

abcd 1234,werty asdfg
Run Code Online (Sandbox Code Playgroud)

另外,我更喜欢在 linux shell 中执行此操作

我怎么能只匹配和替换每一行前面有一个数字后跟一个字母的空格?你会建议我使用另一种工具(甚至方法)来完成这项工作吗?

bash regex sed

10
推荐指数
1
解决办法
1万
查看次数

用 [AJ] 替换 [0-9] 不适用于 sed

我正在处理一个命令,该命令将 sed 中的所有数字 0-9 替换为其相应的字母。我知道我做错了什么,但 sed 并没有将替换正则表达式解释为字符串文字以外的任何东西。

我正在使用的命令是 sed -r 's/[0-9]/[A-J]/g' log > ~/output.txt

这对我来说似乎很简单,但我已经坚持了大约一个小时。我收到的输出只是用字符串“[AJ]”替换了 0-9

linux bash regex sed command-line

10
推荐指数
1
解决办法
1406
查看次数

sed 只打印匹配的表达式

如何让 sed 只打印匹配的表达式?

我想将诸如“电池 0:充电,44%,充电”之类的字符串重写为“电池:44%”。我尝试了以下方法:

sed -n '/\([0-9]*%\)/c Battery: \1'

这不起作用。

常见的“解决方案”是使用搜索和替换并匹配整行: sed -n 's/.*\([0-9]*%\).*/Battery: \1/p' 现在 .* 太贪婪了,\1 只是 %。

此外,我不想匹配比我需要的更多。

regex sed

9
推荐指数
1
解决办法
3万
查看次数

sed 在匹配模式中有多贪婪?

我知道 sed 在匹配模式时很贪婪。但是,它有多贪婪?

考虑这些例子。

$ echo 'foobar123' | sed 's/[0-9]*/(&)/'
()foobar123
$ echo 'foobar123' | sed 's/[0-9][0-9]*/(&)/'
foobar(123)
Run Code Online (Sandbox Code Playgroud)

为什么第二个示例不打印foobar(1)23而是打印foobar(123)

sed

9
推荐指数
1
解决办法
8777
查看次数

使用 sed 替换 nbsp, 160, Hex 00a0, Octal 240, 不间断空格

我在配置文件中有一些问题,其中包含不间断的空格字符。

我应该如何用 sed 指定该字符,以便我可以用空格替换它。

sed -n 's/ / /g'
Run Code Online (Sandbox Code Playgroud)

错误示例

名为重启的服务
停止命名:[确定]
开始命名: 
命名配置错误:
named.localhost:2: 未知 RR 类型“SOA”
named.localhost:8: 未知 RR 类型 '@'
named.localhost:9: 未知 RR 类型“127.0.0.1”
named.localhost:10: 未知 RR 类型 '::1'
.....

我试图在这篇文章中包含原始违规文件的一行。它不接缝工作。Pastebin 下载接缝是唯一保留所有原始二进制文件的工具。http://pastebin.com/ZqT1EWbS。您应该能够复制并通过原始行并使其在您的终端中工作。

linux vim sed special-characters

9
推荐指数
1
解决办法
2万
查看次数