sed
Инструмент для фильтрации и преобразования текстового контента. Обычно используется для пакетной замены, удаления строки файлов
- Оригинальная ссылка:использование команды sed и примеры · github
- Серия статей:что я делаю когда у меня есть сервер · github
Подробная команда sed
Каждая команда sed может быть дополнена опциями, сопоставлением и соответствующими операциями.
# 打印文件第三行到第五行
# -n: 选项,代表打印
# 3-5: 匹配,代表第三行到第五行
# p: 操作,代表打印
$ sed -n '3,5p' file
# 删除文件第二行
# -i: 选项,代表直接替换文件
# 2: 匹配,代表第二行
# d: 操作,代表删除
$ sed -i '2d' file
опции
-n
: напечатать совпадающие строки-i
: непосредственно заменить текстовое содержимое-f
: указывает файл сценария sed, содержащий ряд команд sed.
соответствовать
-
/reg/
: соответствует обычному -
3
: Число указывает, какая строка -
$
: последняя строка -
1,3
: с первой строки на третью строку -
1,+3
: первая строка и три строки вниз (напечатайте строки с первой по четвертую) -
1, /reg/
первая строка и до строки, которая соответствует строке
действовать
-
a
: добавить, вставить следующую строку -
i
: вставить, вставить содержимое предыдущей строки -
p
: печать, печать, обычно используется для печати нескольких строк файла, обычно с-n
использовать вместе -
s
: заменить, заменить, в соответствии с vim
sed examples
Посмотреть брошюру
$ man sed
напечатать определенную строку
p
относится к печати
# 1p 指打印第一行
$ ps -ef | sed -n 1p
UID PID PPID C STIME TTY TIME CMD
# 2,5p 指打印第2-5行
$ ps -ef | sed -n 2,5p
root 1 0 0 Sep29 ? 00:03:42 /usr/lib/systemd/systemd --system --deserialize 15
root 2 0 0 Sep29 ? 00:00:00 [kthreadd]
root 3 2 0 Sep29 ? 00:00:51 [ksoftirqd/0]
root 5 2 0 Sep29 ? 00:00:00 [kworker/0:0H]
напечатать последнюю строку
$
относится к последней строке
Обратите внимание на необходимость использования одинарных кавычек
$ ps -ef | sed -n '$p'
удалить определенную строку
d
означает удалить
$ cat hello.txt
hello, one
hello, two
hello, three
# 删除第三行内容
$ sed '3d' hello.txt
hello, one
hello, two
строка фильтра
а такжеgrep
похоже, ноgrep
Может выделять ключевые слова
$ ps -ef | sed -n /ssh/p
root 1188 1 0 Sep29 ? 00:00:00 /usr/sbin/sshd -D
root 9291 1188 0 20:00 ? 00:00:00 sshd: root@pts/0
root 9687 1188 0 20:02 ? 00:00:00 sshd: root@pts/2
root 11502 9689 0 20:08 pts/2 00:00:00 sed -n /ssh/p
root 14766 1 0 Sep30 ? 00:00:00 ssh-agent -s
$ ps -ef | grep ssh
root 1188 1 0 Sep29 ? 00:00:00 /usr/sbin/sshd -D
root 9291 1188 0 20:00 ? 00:00:00 sshd: root@pts/0
root 9687 1188 0 20:02 ? 00:00:00 sshd: root@pts/2
root 12200 9689 0 20:10 pts/2 00:00:00 grep --color=auto ssh
root 14766 1 0 Sep30 ? 00:00:00 ssh-agent -s
удалить строки, которые соответствуют строке
$ cat hello.txt
hello, one
hello, two
hello, three
$ sed /one/d hello.txt
hello, two
hello, three
заменить содержимое
s
означает замену, аналогичную vim
$ echo hello | sed s/hello/world/
world
добавить содержимое
a
а такжеi
Представляет добавление содержимого в новую строку, аналогично vim.
# i 指定前一行
# a 指定后一行
# -e 指定脚本
$ echo hello | sed -e '/hello/i hello insert' -e '/hello/a hello append'
hello insert
hello
hello append
заменить содержимое файла
$ cat hello.txt
hello, world
hello, world
hello, world
# 把 hello 替换成 world
$ sed -i s/hello/world/g hello.txt
$ cat hello.txt
world, world
world, world
world, world
Меры предосторожности
Если вы хотите использовать его на Macsed
,пожалуйста, используйтеgsed
Замените, иначе не будет полностью развернут в обычный или некоторые форматы.
использоватьbrew install gnu-sed
Установить
$ echo "hello" | sed "s/\bhello\b/world/g"
hello
$ brew install gnu-sed
$ echo "hello" | gsed "s/\bhello\b/world/g"
world