我知道这个问题以前可能已经回答过。我在不同的地方看到了很多关于这个的话题,但对我来说通常很难提取答案。我正在寻找有关“sed”命令的示例用法的帮助。
假设我想对文件“hello.txt”(在与提示相同的目录中)进行操作。任何包含“很少”一词的地方,都应改为“asd”。命令会是什么样的?
显然,运行:
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 中发现,具有安全隐患。这是怎么回事?如何避免?
我有一个包含单词列表的文件。我想从大文本文件中删除此文件中所有出现的所有单词。
例子:
文件 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 个单词)。如何在不必在命令行中指定模式的情况下执行此操作?
我有一个包含文本的文件,如下所示:
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 或任何其他命令将每个值放在双引号内?
在规范中如何替换文件中的字符串?在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)
有任何想法吗 ?
仅当某行位于指定的行号并且与模式匹配时,如何删除该行?
例如:
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) 我正在尝试在输出上运行 sedfind | grep \.ext$
但是,sed 需要输入文件和输出文件。
如何将输出行保存到变量,或将其传递给 sed?
假设我有一个字符串,可以是任何可能/有效的网络地址,如下所示:
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”替换最后一个八位字节
注意:检查字符串是否是有效的网络地址并不重要,因为所有正在测试的字符串都被假定为有效的网络地址。
有没有办法在 Ubuntu 服务器上搜索正则表达式,然后找到并用另一个字符串替换它?我现在正在使用以下命令,但它没有考虑实际更改 grepped 字符串:
grep --recursive --ignore-case “string”
Run Code Online (Sandbox Code Playgroud)
如果我使用 awk 或 sed,我将如何编写它以将“wavbyte”替换为“gitship”,用于我的整个服务器出现“wavbyte”的所有实例?
我有一个与以下格式类似的文件:
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 将其用作分隔符?
Ubuntu 16.04
我有一些非常大的文件,因此无法手动修改它。我想改变所有出现的
<tag1>true</tag1>
Run Code Online (Sandbox Code Playgroud)
到
<tag1>false</tag1>
Run Code Online (Sandbox Code Playgroud) 要将字符串 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 ×8
bash ×2
grep ×2
replace ×2
string ×2
csv-simple ×1
filenames ×1
find ×1
libreoffice ×1
linux ×1
options ×1
perl ×1
pipe ×1
security ×1
shell-script ×1
spreadsheet ×1
text ×1