Linux sed命令
Linux sed命令| Linux Stream Editor
Linux'sed'命令代表流编辑器。它用于使用正则表达式编辑流(文件)。但是这种编辑不是永久的。它仅保留在显示中,但实际上文件内容保持不变。
主要用于文本替换;此外,它还可用于其他文本操作操作,如插入,删除,搜索等。 sed命令允许我们编辑文件而无需打开它们。对正则表达式的支持使其成为功能更强大的文本处理工具。
语法:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
选项:
以下是sed命令的一些命令行选项:
-n, --quiet, --silent:它有力地允许我们打印图案空间。
-e script, --expression=script: 用于将脚本添加到命令中
-f script-file, --file=script-file: 用于将脚本文件的内容添加到要执行的命令中。
--follow-symlinks: 用于在原位处理时跟随符号链接。
-i[SUFFIX], --in-place[=SUFFIX]: 用于就地编辑文件(如果提供SUFFIX选项,则创建备份)。
-l N, --line-length=N: 用于为l命令指定所需的换行长度。
-posix: 用于禁用所有GNU扩展。
-E, -r, --regexp-extended: 它允许我们在脚本(出于可移植性,请使用POSIX-E。)。
-s,-separate: 用于将文件视为单独文件而不是单个文件,并持续很长的时间。
--sandbox: 用于在沙盒模式下运行。
-u, --unbuffered:用于从输入文件中加载最少的数据,并更频繁地刷新输出缓冲区。
-z,--null-data: 用于用NUL字符分隔行。
--help:用于显示帮助手册。
--version:用于显示版本信息。
应用于STDIN目录
sed命令不仅限于操作文件,还可以用于文件。另外,我们可以将其应用于STDIN目录。
echo class7 | sed 's/class/jtp/'
echo class7 | sed 's/7/10/'
cat msg.txt | sed 's/learn/study/'
上面的命令将用第二个文本模式替换第一个文本。考虑以下输出:
从上面的输出中,首先,我们执行了在字符串" class7"上执行" sed"命令,其中" class"更改为" jtp",将7更改为10、然后,在流" msg.txt"上执行了" sed"命令,其中" learn"被转换为" study" 。'
全局替换
在前面的示例中,所有"学习"字词均未编辑为"学习"字词。要编辑每个单词,我们必须使用全局替换" g"。它将编辑文件或字符串中的所有指定单词。
语法:
command | sed 's/<oldWord>/<newWord>/g'
请考虑以下示例:
echo class7 class9 | sed 's/class/jtp/g'
cat msg.txt | sed 's/learn/study/g'
以上命令将替换所有指定的文本模式。考虑以下输出:
从上述输出中,通过执行命令" echo class7 class9 | sed's/class/jtp/g'"将所有'class'转换为'jtp',并使用命令" cat msg.txt | sed's/learn/study/g'"将所有'learn '已转换为'研究'。
删除行
" d"选项可让我们从文件中删除整行。我们只需要使用'd'选项从该行中指定一个单词,该行将被删除。但是,请注意,将删除所有具有相同单词的行。它将执行为:
cat <fileName> | sed '/<Word>/d'
请考虑以下命令:
cat msg.txt | sed '/jtp/d'
上面的命令将删除带有单词" jtp"的行。考虑以下输出:
从上面的输出中,通过执行命令" cat msg.txt | sed'/jtp/d'"删除所有包含单词'jtp'的行。
使用多重sed命令
'-e'选项允许我们一次执行多个sed命令。通过执行以下命令,我们可以执行多个sed操作:
sed-e '<script 1> ; <script 2>' <file name>
请考虑以下命令:
sed-e 's/red/blue/; s/yellow/black/' exm.txt
上面的命令将在文件'exm.txt'中应用所有指定的操作。考虑以下输出:
从上面的输出中可以看到,所有"红色"字样替换为"蓝色",所有"黄色"字样替换为"黑色"。我们也可以这样分隔命令:
sed-e '
>s/red/blue/;
>s/yellow/black/' exm.txt
结果将与上面的命令相同。
从文件中读取命令
我们可以保存sed命令在一个文件中,然后一次在任何文件中应用它们。可以通过如下指定'-f'选项来完成:
sed-f <sed file> <file name>
根据上述命令,"
"是具有sed命令列表的文件。考虑以下命令:
sed-f SedCommands exm.txt
上面的命令将在'exm.txt'上的'SedCommand'文件中应用所有指定的命令。考虑以下输出:
从上面的输出中,我们使用了已应用的命令到前面的例子。因此,输出与前面的示例相同。
替换字符
我们可以使用感叹号(!)作为字符串定界符。例如,我们要替换bash shell,并在"/etc/passwd"中将其替换为csh shell。为此,请执行以下命令:
sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd
我们可以通过执行以下命令来达到相同的结果:
sed 's!/bin/bash!/bin/csh!' /etc/passwd
限制sed
sed命令的基本用法处理整个文件。但是,我们可以限制sed命令并指定任何行。限制sed命令有两种方法:
一系列行
与特定行匹配的模式。
我们可以提供一个数字来指定一行,如下所示:
sed '3s/Red/Blue/' exm.txt
上面的命令将在第三行上应用指定的操作。考虑以下输出:
从上面的输出中,只有第三行是修改。
我们还可以指定行的范围。要指定行数范围,请执行以下命令:
sed '1,3s/Red/Blue/' exm.txt
上面的命令将更新第1行和第3行中的指定文本。
插入和附加文本
" i"和" a"标志用于在文件中插入和附加文本。 " i"标志将在字符串之前添加文本," a"标志用于在字符串之后添加文本。考虑以下命令:
echo "Another Demo" | sed 'i\First Demo'
以上命令将在文本"另一个演示"之前插入文本。考虑以下输出:
要附加文本,请执行以下命令:
echo "Another Demo" | sed 'a\First Demo'
以上命令将附加文本。考虑以下输出:
修改行
" c"标志用于修改特定行。要修改一行,请执行以下命令:
sed '3c\this is a modified line.' exm.txt
上面的命令将更新第三行。考虑以下输出:
我们还可以使用正则表达式来更新更多内容多于一条具有相同图案的线。考虑以下命令:
sed '/Apple is /c Line updated.' exm.txt
上面的命令将更新所有具有字符串" Apple is"的行。考虑以下输出:
" y"标志用于转换字符。字符的转换不能限于特定的情况。要转换字符,请执行以下命令:
上面的命令会将字符" a"," b"," c"转换为" d"," e"," f"。考虑以下输出:
打印行号
" ="符号用于打印行号。要打印行号,请执行以下命令:
上面的命令将显示文件内容的行号。考虑以下输出:
带有'-n'选项的等号指定包含匹配脚本的行号。考虑以下输出:
上面的命令将显示包含单词"mango"的行号。考虑下面的输出:
从上面的输出中,我们可以看到以下行2号有'mango'字样。