использование команды sed и примеры

Linux

sedИнструмент для фильтрации и преобразования текстового контента. Обычно используется для пакетной замены, удаления строки файлов

Подробная команда 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

Ссылаться на