标签: sed

Perl 搜索和替换

如何使用搜索和替换来更改文件的内容。

我需要能够更改“全部为无”和/或“全部为无”,而不必每次都手动执行数百行。

下面是一个示例文本文件,右边是行号。我已经知道如何打开和关闭文件以进行写入。

线

1define_filter absolute_minimal_filter ------- all
2 define_filter atma_basic_filter -------- ----- none
3define_filter atma_communication_filter -- all
4 define_filter atma_health_filter -------------无
5 define_filter atma_misc_filter --------------- 所有
6 define_filter atma_performance_filter ---- 无
7 define_filter atma_supplemental_filter ---- 无

replace awk perl sed

5
推荐指数
1
解决办法
287
查看次数

如何防止 bash $ 替换?

我试图在下面保留 $if 并
希望以下输出
$if

bash 通过执行
$ 替换 来妨碍

$ sed -e 's:\\$:\\$:g' <<ENDOFFILE  
> $if  
> ENDOFFILE  
Run Code Online (Sandbox Code Playgroud)

或者

$ tr '$' '\$' <<ENDOFFILE  
> $if  
> ENDOFFILE  
Run Code Online (Sandbox Code Playgroud)

有没有办法将 $keywords 保留
到 stdout 而不
在 stdin 中显式地将它们转义出来?

我应该在尝试之前切换到另一个 shell 吗?

linux bash sed unix-shell

5
推荐指数
1
解决办法
3948
查看次数

在 linux 中递归使用 SED?

我想递归地执行以下命令

sed -i 's/href=\"1\//href=\"\/1\//g' ./*
Run Code Online (Sandbox Code Playgroud)

以便它将所有子目录中的所有 href="1 替换为 href="/1。是否有一个标志可以添加到此命令中以实现我想要的结果?

linux unix shell sed

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

sed 的正则表达式抓取多行或更好的方法?

我正在创建一个连接到服务器并将输出转储到临时文件的脚本。我想在脚本中使用 sed 从临时文件中获取特定信息。输出总是有 80 个字符的虚线,然后是我想要的信息,然后是 Disconnected 语句。

如果它只是一行,我已经得到了一个正则表达式,问题是我如何对换行符进行分组?

正则表达式

-\{80\}[\r\n]*\(.*\)[\r\n]\{4\}Disconnected
Run Code Online (Sandbox Code Playgroud)

文件

...
--------------------------------------------------------------------------------
The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.

Disconnected ...
Run Code Online (Sandbox Code Playgroud)

期望输出

The information that I want to get can be a single line or multiple lines.
Another line to grab.

And this should be caught as well.
Run Code Online (Sandbox Code Playgroud)

bash regex sed

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

linux + sed - 只替换字符串最右边的字符

我有 linux 机器 red-hat 5.1

如何仅替换正确的单个字符(字符串的最一侧)

来自我的 sed 语法的示例(不好,因为它替换了两个“a”字符) l

 echo machine1a | sed s'/a/b/g'

 mbchine1b
Run Code Online (Sandbox Code Playgroud)

但请求的答案应该是 - machine1b 而不是 mbchine1b

linux sed

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

拆分大日志文件而不保留原始文件(就地拆分)

我有一个 226GB 的日志文件,我想把split它分成几块以便于xz阅读。问题是我的可用空间只剩下 177GB 的空间。

有没有办法split在不保留原始文件的额外副本的情况下将文件分成一半或分成N个块?

    $ split myFile.txt
    $ ls -halF
-rw-r--r--   1 user group 35 Dec 29 13:17 myFile.txt
-rw-r--r--   1 user group 8 Dec 29 13:18 xaa
-rw-r--r--   1 user group 3 Dec 29 13:18 xab
-rw-r--r--   1 user group 5 Dec 29 13:18 xac
-rw-r--r--   1 user group 10 Dec 29 13:18 xad
-rw-r--r--   1 user group 8 Dec 29 13:18 xae
-rw-r--r--   1 user group 1 Dec …
Run Code Online (Sandbox Code Playgroud)

linux awk sed

5
推荐指数
1
解决办法
5618
查看次数

从大文件开头删除文本的最佳方法

我有一个巨大的 MySQL 备份文件(来自 mysqldump),其中的表按字母顺序排列。我的恢复失败,我想从备份文件中的下一个表开始。(我已经纠正了这个问题,这实际上并不是一个关于 MySQL 恢复等的问题。)

我想做的是获取我的备份文件,例如backup.sql并修剪文件的开头,直到看到这一行:

-- Table structure for `mytable`
Run Code Online (Sandbox Code Playgroud)

然后之后的所有内容都将最终出现在我的结果文件中,例如backup-secondhalf.sql. 由于文件是 bzip2 压缩的,这有点复杂,但这应该不是什么大问题。

我想我可以这样做:

$ bunzip2 -c backup.sql.bz2 | grep --text --byte-offset --only-matching -e '--Table structure for table `mytable`' -m 1
Run Code Online (Sandbox Code Playgroud)

这将为我提供文件中我想要修剪的字节偏移。然后:

$ bunzip2 -c backup.sql.bz2 | dd skip=[number from above] | bzip2 -c > backup-secondhalf.sql.bz2
Run Code Online (Sandbox Code Playgroud)

不幸的是,这需要我在文件上运行 Bunzip2 两次并读取所有这些字节两次。

有没有办法一次性完成这一切?

我不确定我的 sed-fu 是否足够强大来执行“删除正则表达式之前的所有行,然后让文件的其余部分通过”表达式。

这是在 Debian Linux 上,所以我有可用的 GNU 工具。

text grep dd sed

5
推荐指数
2
解决办法
843
查看次数

使用 utf8 编码执行 bash 脚本的问题

我有一个用 utf8 编码的 bash 脚本。

在脚本中,我使用 sed 命令§作为分隔符。

现在,当我运行执行此脚本时会sed抱怨分隔符。

如果我使用普通字符作为 ex 的分隔符,@那么一切正常。

我已经在 putty[set utf8 in putty] 中查看了脚本,并且字符看起来很好。

还有来自locale命令的Linux 默认字符集显示

 LC_CSET=en_US.UTF-8 
Run Code Online (Sandbox Code Playgroud)

可能出了什么问题?

早些时候,我曾经对 shell 脚本使用 windows-1252 编码,这曾经有效。

bash utf-8 sed shell-scripting

4
推荐指数
1
解决办法
2988
查看次数

sed 搜索行并仅替换该行中的文本

如果该行包含 Z(capital),我想使用 sed 将任何 x(small) 替换为 0

x,Z,y
y,X,z,
Y,z,x
x,Z,y
Run Code Online (Sandbox Code Playgroud)

linux sed

4
推荐指数
1
解决办法
234
查看次数

如何从一行、三行输入 SSH 私钥

我有 ssh 密钥,类似这样的东西

-----BEGIN RSA PRIVATE KEY----- my_super_secret_password -----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

当然这个键不起作用。当我在做手工的时候,像这样的东西

-----BEGIN RSA PRIVATE KEY----- 
my_super_secret_password 
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

有用。当我删除 this-----BEGIN RSA PRIVATE KEY-----和 this 时-----END RSA PRIVATE KEY-----,我的 ssh-key 不起作用。

所以,问题。如何,我可以通过一些命令自动制作,比如sedor awk,或任何其他命令,我如何从这个字符串中制作

-----BEGIN RSA PRIVATE KEY----- my_super_secret_password -----END RSA PRIVATE KEY-----

这三个字符串

-----BEGIN RSA PRIVATE KEY----- 
my_super_secret_password 
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助。如果你知道关于这个问题的任何其他答案,我很高兴听到你的消息。原因,为什么我需要它,因为我在AWS Secret Manager. 因此,该管理器仅将密钥存储在一行中。

ssh awk sed private-key ssh-keys

4
推荐指数
2
解决办法
8009
查看次数

标签 统计

sed ×10

linux ×5

awk ×3

bash ×3

dd ×1

grep ×1

perl ×1

private-key ×1

regex ×1

replace ×1

shell ×1

shell-scripting ×1

ssh ×1

ssh-keys ×1

text ×1

unix ×1

unix-shell ×1

utf-8 ×1