相关疑难解决方法(0)

使用“sed”查找和替换

我知道这个问题以前可能已经回答过。我在不同的地方看到了很多关于这个的话题,但对我来说通常很难提取答案。我正在寻找有关“sed”命令的示例用法的帮助。

假设我想对文件“hello.txt”(在与提示相同的目录中)进行操作。任何包含“很少”一词的地方,都应改为“asd”。命令会是什么样的?

sed shell-script text-processing

392
推荐指数
2
解决办法
176万
查看次数

运行 perl -ne '...' 的安全隐患 *

显然,运行:

perl -n -e 'some perl code' *
Run Code Online (Sandbox Code Playgroud)

或者

find . ... -exec perl -n -e '...' {} +
Run Code Online (Sandbox Code Playgroud)

(与-p代替相同-n

或者

perl -e 'some code using <>' *
Run Code Online (Sandbox Code Playgroud)

经常在本网站上发布的 one-liners 中发现,具有安全隐患。这是怎么回事?如何避免?

security options perl filenames

32
推荐指数
2
解决办法
2765
查看次数

如何从文本文件中删除所有出现的单词列表?

我有一个包含单词列表的文件。我想从大文本文件中删除此文件中所有出现的所有单词。

例子:

文件 1

queen
king
Run Code Online (Sandbox Code Playgroud)

文本文件示例

Both the king and queen are monarchs. Will the queen live? Queen, it is!
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的:

sed -i 's/queen/ /g' page.txt
sed -i 's/Queen/ /g' page.txt
Run Code Online (Sandbox Code Playgroud)

输出

Both the and are monarchs. Will the live? , it is!
Run Code Online (Sandbox Code Playgroud)

我的单词列表很大(超过 50000 个单词)。如何在不必在命令行中指定模式的情况下执行此操作?

grep sed text-processing text

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

存储在 CSV 中的双引号值分配?

我有一个包含文本的文件,如下所示:

dt=2016-06-30,path=path1,site=US,mobile=1
dt=2016-06-21,path=path2,site=UK,mobile=0
Run Code Online (Sandbox Code Playgroud)

我想将其转换为键值对中带有双引号值的文本,如下所示:

dt="2016-06-30",path="path1",site="US",mobile="1"
dt="2016-06-21",path="path2",site="UK",mobile="0"
Run Code Online (Sandbox Code Playgroud)

如何使用 Sed 或任何其他命令将每个值放在双引号内?

sed text-processing regular-expression csv-simple

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

仅替换特定范围字符串

在规范中如何替换文件中的字符串?3. 仅当在特定上下文中找到字符串时才替换,我试图在文件中用空格替换管道,其结构如下:

12/12/2000|23:16:03|Shell Sc|8332|START|TEXT|WITH|SPACES|-|[END]|[Something else]
Run Code Online (Sandbox Code Playgroud)

我需要这样:

12/12/2000|23:16:03|Shell Sc|8332|START TEXT WITH SPACES -|[END]|[Something else]
Run Code Online (Sandbox Code Playgroud)

编码:

echo "12/12/2000|23:16:03|Shell Sc|8332|START|TEXT|WITH|SPACES|-|[END]|[Something else]" | \
 sed 's/\(START.*\)\|/ \1/g'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?

sed replace

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

仅当某行位于指定的行号并且与模式匹配时,如何删除该行?

仅当某行位于指定的行号并且与模式匹配时,如何删除该行?


例如:

  • 我要删除( d);
  • 所述第三线(3);
  • 如果它是空白的( ^$);

以下语法:

cat file | sed '3 /^$/d'
Run Code Online (Sandbox Code Playgroud)

返回以下错误:

sed: -e expression #1, char 3: unknown command: `/'
Run Code Online (Sandbox Code Playgroud)

bash sed

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

如何对所有匹配的文件使用 sed?

我正在尝试在输出上运行 sedfind | grep \.ext$
但是,sed 需要输入文件和输出文件。
如何将输出行保存到变量,或将其传递给 sed?

pipe sed find

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

如何用数字 2 替换有效网络地址的最后一个八位字节

假设我有一个字符串,可以是任何可能/有效的网络地址,如下所示:

STR="192.168.1.0/24"
Run Code Online (Sandbox Code Playgroud)

我想要做的是将最后一个八位字节(在本例中为 0/24,但可以是任何数字)替换为数字 2,但是我不知道最后一个八位字节可以是什么(不会打印新值) ,所以改变:

192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

到:

192.168.1.2
Run Code Online (Sandbox Code Playgroud)

无论网络地址是什么,我想用“2”替换最后一个八位字节

注意:检查字符串是否是有效的网络地址并不重要,因为所有正在测试的字符串都被假定为有效的网络地址。

bash sed text-processing

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

Grep 全局查找替换

有没有办法在 Ubuntu 服务器上搜索正则表达式,然后找到并用另一个字符串替换它?我现在正在使用以下命令,但它没有考虑实际更改 grepped 字符串:

grep --recursive --ignore-case “string”
Run Code Online (Sandbox Code Playgroud)

如果我使用 awk 或 sed,我将如何编写它以将“wavbyte”替换为“gitship”,用于我的整个服务器出现“wavbyte”的所有实例?

grep string regular-expression

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

将分隔符插入文件

我有一个与以下格式类似的文件:

1.1.1.5 Ensure mounting of hfsplus filesystems is disabled
1.1.1.6 Ensure mounting of squashfs filesystems is disabled
1.1.15 Ensure nodev option set on /dev/shm partition
1.1.16 Ensure nosuid option set on /dev/shm partition
1.2.2 Ensure GPG keys are configured
1.3.1 Ensure AIDE is installed
Run Code Online (Sandbox Code Playgroud)

它们并非都以Ensure.

我正在尝试将其导入到电子表格第一列(xxxx)的电子表格中。

例如,我需要用逗号分隔第一列,以便 LibreOffice 可以将其用作分隔符。

如何更改文件以在第一列后添加逗号,以便 LibreOffice 可以使用 bash 将其用作分隔符?

text-processing spreadsheet libreoffice text-formatting

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

如何修改文件内容?

Ubuntu 16.04

我有一些非常大的文件,因此无法手动修改它。我想改变所有出现的

<tag1>true</tag1>
Run Code Online (Sandbox Code Playgroud)

<tag1>false</tag1>
Run Code Online (Sandbox Code Playgroud)

linux text-processing

0
推荐指数
1
解决办法
156
查看次数

同时在同一文件上运行多个 sed 命令

要将字符串 foo 的所有出现更改为 bar 在我使用的目录中的所有文件中

sed -i -- 's/foo/bar/g' *
Run Code Online (Sandbox Code Playgroud)

发现这里

但我也想将 NAME 更改为 name 等。我试过了,

sed -i -- 's/foo/bar/g' * ; sed -i -- 's/NAME/name/g' *

这会创建新文件。如何使用此命令重写原始文件,将 foo 替换为 bar 并将 NAME 替换为 name,然后再进行其他替换,而不创建新文件?

sed string replace

0
推荐指数
1
解决办法
237
查看次数