[Notes d'étude Linux 28-2] Outil de traitement de texte sed shell

1. Introduction à sed


Sed est un éditeur de flux. C'est un outil très utile dans le traitement de texte. Il peut être utilisé parfaitement avec les expressions régulières et possède des fonctions extraordinaires. Pendant le traitement, la ligne en cours de traitement est stockée dans un tampon temporaire appelé "espace de motif", puis le contenu du tampon est traité avec la commande sed. Une fois le traitement terminé, le contenu du tampon est envoyé à l'écran. Traitez ensuite la ligne suivante et répétez de cette façon jusqu'à la fin du fichier. Le contenu du fichier ne change pas sauf si vous utilisez la redirection pour stocker la sortie. Sed est principalement utilisé pour éditer automatiquement un ou plusieurs fichiers; simplifier les opérations répétées sur les fichiers; écrire des programmes de conversion, etc.


2. Introduction à la commande sed


格式:
sed [选项] 命令 处理对象
sed [选项] '表达式1; 表达式2' 处理对象

option sed
-n
Afficher uniquement les résultats du traitement
-je
Enregistrez le contenu modifié dans le fichier
-e
Autoriser l'exécution de plusieurs commandes sur la même ligne
-f fichier de script
Utiliser des fichiers de script pour traiter le fichier

commande sed
p
Ligne d'affichage (ligne du bloc de modèle d'impression)
Supprimer la ligne
une
Insérer une ligne (insérer du texte sous la ligne actuelle)
je
Insérer une ligne (insérer du texte au-dessus de la ligne actuelle)
c
Remplacer la ligne
s
Caractère de remplacement
fichier w
Écrivez et ajoutez le bloc de modèle à la fin du fichier
fichier r
Consolider les fichiers (lire les lignes du fichier)
q
abandonner
!
Indique que les commandes suivantes agissent sur les lignes non sélectionnées
=
Imprimer le numéro de la ligne actuelle

jeu de métacaractères sed / caractère /
^
Début de la ligne de match
$
Fin de la ligne correspondante
.
Correspond à n'importe quel caractère autre qu'une nouvelle ligne
*
Correspond à 0 ou plusieurs caractères
&
Enregistrer les caractères de recherche pour remplacer d'autres caractères
\ <
Faire correspondre le début d'un mot
\>
Faire correspondre la fin d'un mot
{m}
m fois
{m,}
Au moins m fois
{m, n}
mn fois
{, n}
0 à n fois
(Texte) {fois}
Combien de fois le texte apparaît


3. Exemples d'utilisation de sed


p ligne d'affichage

-n 5p	#显示第五行
-n 3,5p	#显示3-5行
-ne '3p;5p'	#显示3和5行
-ne '5,$p'	#5-最后一行
-n '/^ro/p'	#显示以ro开头的行

Insérez la description de l'image ici

d supprimer

sed 5d passwd	#删除第5行
sed '/^ro/d' passwd	#把ro开头的行删除
sed '/^ro/!d' passwd	#除了ro开头的行都删除
sed '3,$d' passwd	#删除第3行之后
sed '/^$/d' passwd	#删除空白行

Insérez la description de l'image ici

a Insérer (insérer du texte sous la ligne courante)

sed "5a hello westos" passwd	#第5行后添加行
sed "/root/a hello westos" passwd	#有root的行后添加行
sed '$a hello westos' passwd	#最后一行后添加行
sed '1,5a hello westos' passwd	#1-5行,每行后添加行
sed -e '1a hello westos' -e '5a hello' passwd	#第一行和第5行后添加行

Insérez la description de l'image ici
Insérez la description de l'image ici

i Insérer (insérer du texte au-dessus de la ligne actuelle)

sed '3i zy' passwd	#在第3行前插入行
sed '1,3i zy' passwd	#在1-3行,每行前插入行
sed '/lp/i zy' passwd	#在有lp这一行前插入行

Insérez la description de l'image ici

c remplacer

sed '3c hello zy' passwd	#第3行替换
sed '/^root/c hello zy' passwd	#root开头的行替换
sed '/sbin/c hello zy' passwd	#有sbin的行替换

Insérez la description de l'image ici

w écrire un fichier

sed '3w w_file' passwd	#把文件passwd的第三行写入到w_file中
sed '3,5w w_file' passwd	#把文件passwd的3-5行写入到w_file中
sed '/var/w w_file' passwd	#把文件passwd有var的行写入到w_file中

Insérez la description de l'image ici

r Fichier d'intégration


(après le numéro de ligne)

sed '3r r_file' passwd	#把文件r_file整合在passwd第3行之后
sed '$r r_file' passwd	#把文件r_file整合在passwd最后

Insérez la description de l'image ici

caractère de remplacement de s

sed 's/sbin/---/g' passwd	#把全文的sbin替换为---
sed '3s/sbin/---/g' passwd	#把第3行的sbin替换为---
sed '2,4s/sbin/---/g' passwd	#把第2-4行的sbin替换为---
sed '2,4s/sbin/---/g;6s/sbin/+++/g' passwd	#把第2-4行的sbin替换为---,第6行的sbin替换为+++
sed -e '/bin/,/adm/s/sbin/---/g' passwd	#bin到adm之间的行的sbin替换为---
sed -e 's/\//--/g' passwd	#把/替换为-(需要转义符号)
sed -e 's@/@777@g' passwd	#把/替换为-(用@无需转义)

Insérez la description de l'image ici
Insérez la description de l'image ici

= Afficher le numéro de ligne

sed '=' passwd	#显示行号(行号和内容不在同一列)
sed '$=' passwd	#只显示最后一行的行号
sed '=' passwd | sed -e 'N;s/\n/ /g'	#将行号和内容显示在同一列
sed -n '$=' passwd	#统计行号
wc -l passwd	#统计行号

Insérez la description de l'image ici
Insérez la description de l'image ici



4. Test


Editez le script apache_port.sh

  1. Modifiez le numéro de port http par le numéro suivi du script
  2. selinux est éteint

#!/bin/bash
#检测脚本后的端口号是否为空
[ -z $1 ] && {
    
    
	echo "ERROR: Please input port following script !"
	exit
	}
#找到http主配置文件中的端口号那一行 并修改
sed "/^Listen/c Listen $1" -i /etc/httpd/conf/httpd.conf
#重启httpd服务
systemctl restart httpd
exit	#退出

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46069582/article/details/111407822
conseillé
Classement