MAGESH MARUTHAMUTHU 发布的文章

当你在使用文本文件时,很可能需要查找和替换文件中的字符串。sed 命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 sed 命令和 awk 命令来完成。

在本教程中,我们将告诉你使用 sed 命令如何做到这一点,然后讨论讨论 awk 命令相关的。

sed 命令是什么

sed 命令表示 Stream Editor(流编辑器),用来在 Linux 上执行基本的文本操作。它可以执行各种功能,如搜索、查找、修改、插入或删除文件。

此外,它也可以执行复杂的正则表达式匹配。

它可用于以下目的:

  • 查找和替换匹配给定的格式的内容。
  • 在指定行查找和替换匹配给定的格式的内容。
  • 在所有行查找和替换匹配给定的格式的内容。
  • 搜索并同时替换两种不同的模式。

本文列出的十五个例子可以帮助你掌握 sed 命令。

如果要使用 sed 命令删除文件中的行,去下面的文章。

注意:由于这是一篇演示文章,我们使用不带 -i 选项的 sed 命令,该选项会在 Linux 终端中删除行并打印文件内容。

但是,在实际环境中如果你想删除源文件中的行,使用带 -i 选项的 sed 命令。

常见的 sed 替换字符串的语法。

sed -i 's/Search_String/Replacement_String/g' Input_File

首先我们需要了解 sed 语法来做到这一点。请参阅有关的细节。

  • sed:这是一个 Linux 命令。
  • -i:这是 sed 命令的一个选项,它有什么作用?默认情况下,sed 打印结果到标准输出。当你使用 sed 添加这个选项时,那么它会在适当的位置修改文件。当你添加一个后缀(比如,-i.bak)时,就会创建原始文件的备份。
  • s:字母 s 是一个替换命令。
  • Search_String:搜索一个给定的字符串或正则表达式。
  • Replacement_String:替换的字符串。
  • g:全局替换标志。默认情况下,sed 命令替换每一行第一次出现的模式,它不会替换行中的其他的匹配结果。但是,提供了该替换标志时,所有匹配都将被替换。
  • /:分界符。
  • Input_File:要执行操作的文件名。

让我们来看看文件中用sed命令来搜索和转换文本的一些常用例子。

我们已经创建了用于演示的以下文件。

# cat sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

1) 如何查找和替换一行中“第一次”模式匹配

下面的 sed 命令用 linux 替换文件中的 unix。这仅仅改变了每一行模式的第一个实例。

# sed 's/unix/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

2) 如何查找和替换每一行中“第 N 次”出现的模式

在行中使用/1/2……/n 等标志来代替相应的匹配。

下面的 sed 命令在一行中用 linux 来替换 unix 模式的第二个实例。

# sed 's/unix/linux/2' sed-test.txt

1 Unix unix linux 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

3) 如何搜索和替换一行中所有的模式实例

下面的 sed 命令用 linux 替换 unix 格式的所有实例,因为 g 是一个全局替换标志。

# sed 's/unix/linux/g' sed-test.txt

1 Unix linux linux 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

4) 如何查找和替换一行中从“第 N 个”开始的所有匹配的模式实例

下面的 sed 命令在一行中替换从模式的“第 N 个”开始的匹配实例。

# sed 's/unix/linux/2g' sed-test.txt

1 Unix unix linux 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

5) 在特定的行号搜索和替换模式

你可以替换特定行号中的字符串。下面的 sed 命令用 linux 仅替换第三行的 unix 模式。

# sed '3 s/unix/linux/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

6) 在特定范围行号间搜索和替换模式

你可以指定行号的范围,以替换字符串。

下面的 sed 命令在 1 到 3 行间用 linux 替换 Unix 模式。

# sed '1,3 s/unix/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

7) 如何查找和修改最后一行的模式

下面的 sed 命令允许你只在最后一行替换匹配的字符串。

下面的 sed 命令只在最后一行用 Unix 替换 Linux 模式。

# sed '$ s/Linux/Unix/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Unix is free and opensource operating system

8) 在一行中如何只查找和替换正确的模式匹配

你可能已经注意到,子串 linuxunix 被替换为在第 6 个示例中的 linuxlinux。如果你只想更改正确的匹配词,在搜索串的两端用这个边界符 \b

# sed '1,3 s/\bunix\b/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

9) 如何以不区分大小写来搜索与替换模式

大家都知道,Linux 是区分大小写的。为了与不区分大小写的模式匹配,使用 I 标志。

# sed 's/unix/linux/gI' sed-test.txt

1 linux linux linux 23
2 linux Linux 34
3 linuxlinux linuxLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

10) 如何查找和替换包含分隔符的字符串

当你搜索和替换含分隔符的字符串时,我们需要用反斜杠 \ 来取消转义。

在这个例子中,我们将用 /usr/bin/fish 来替换 /bin/bash

# sed 's/\/bin\/bash/\/usr\/bin\/fish/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /usr/bin/fish CentOS Linux OS
Linux is free and opensource operating system

上述 sed 命令按预期工作,但它看起来来很糟糕。 为了简化,大部分的人会用竖线 | 作为正则表达式的定位符。 所以,我建议你用它。

# sed 's|/bin/bash|/usr/bin/fish/|g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /usr/bin/fish/ CentOS Linux OS
Linux is free and opensource operating system

11) 如何以给定的模式来查找和替换数字

类似地,数字可以用模式来代替。下面的 sed 命令以 [0-9] 替换所有数字为 number

# sed 's/[0-9]/number/g' sed-test.txt

number Unix unix unix numbernumber
number linux Linux numbernumber
number linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

12) 如何用模式仅查找和替换两个数字

如果你想用模式来代替两位数字,使用下面的 sed 命令。

# sed 's/\b[0-9]\{2\}\b/number/g' sed-test.txt

1 Unix unix unix number
2 linux Linux number
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system

13) 如何用 sed 命令仅打印被替换的行

如果你想显示仅更改的行,使用下面的 sed 命令。

  • p - 它在终端上输出替换的行两次。
  • -n - 它抑制由 p 标志所产生的重复行。
# sed -n 's/Unix/Linux/p' sed-test.txt

1 Linux unix unix 23
3 linuxunix LinuxLinux

14) 如何同时运行多个 sed 命令

以下 sed 命令同时检测和置换两个不同的模式。

下面的 sed 命令搜索 linuxunixCentOS 模式,用 LINUXUNIXRHEL8 一次性更换它们。

# sed -e 's/linuxunix/LINUXUNIX/g' -e 's/CentOS/RHEL8/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 LINUXUNIX UnixLinux
linux /bin/bash RHEL8 Linux OS
Linux is free and opensource operating system

下面的 sed 命令搜索替换两个不同的模式,并一次性替换为一个字符串。

以下 sed 的命令搜索 linuxunixCentOS 模式,用 Fedora30 替换它们。

# sed -e 's/\(linuxunix\|CentOS\)/Fedora30/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 Fedora30 UnixLinux
linux /bin/bash Fedora30 Linux OS
Linux is free and opensource operating system

15) 如果给定的模式匹配,如何查找和替换整个行

如果模式匹配,可以使用 sed 命令用新行来代替整行。这可以通过使用 c 标志来完成。

# sed '/OS/ c\
New Line
' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
New Line
Linux is free and opensource operating system

16) 如何搜索和替换相匹配的模式行

sed 命令中你可以为行指定适合的模式。在匹配该模式的情况下,sed 命令搜索要被替换的字符串。

下面的 sed 命令首先查找具有 OS 模式的行,然后用 ArchLinux 替换单词 Linux

# sed '/OS/ s/Linux/ArchLinux/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS ArchLinux OS
Linux is free and opensource operating system

via: https://www.2daygeek.com/linux-sed-to-find-and-replace-string-in-files/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:Asche910 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

出于某些原因,你可能需要跟踪 Linux 上的新用户创建信息。同时,你可能需要通过邮件发送详细信息。这或许是审计目标的一部分,或者安全团队出于跟踪目的可能希望对此进行监控。

我们可以通过其他方式进行此操作,正如我们在上一篇文章中已经描述的那样。

Linux 有许多开源监控工具可以使用。但我不认为他们有办法跟踪新用户创建过程,并在发生时提醒管理员。

那么我们怎样才能做到这一点?

我们可以编写自己的 Bash 脚本来实现这一目标。我们过去写过许多有用的 shell 脚本。如果你想了解,请进入下面的链接。

这个脚本做了什么?

这将每天两次(一天的开始和结束)备份 /etc/passwd 文件,这将使你能够获取指定日期的新用户创建详细信息。

我们需要添加以下两个 cron 任务来复制 /etc/passwd 文件。

# crontab -e

1 0 * * * cp /etc/passwd /opt/scripts/passwd-start-$(date +"%Y-%m-%d")
59 23 * * * cp /etc/passwd /opt/scripts/passwd-end-$(date +"%Y-%m-%d")

它使用 diff 命令来检测文件之间的差异,如果发现与昨日有任何差异,脚本将向指定 email 发送新用户详细信息。

我们不用经常运行此脚本,因为用户创建不经常发生。但是,我们计划每天运行一次此脚本。

这样,你可以获得有关新用户创建的综合报告。

注意:我们在脚本中使用了我们的电子邮件地址进行演示。因此,我们要求你用自己的电子邮件地址。

# vi /opt/scripts/new-user-detail.sh

#!/bin/bash
mv /opt/scripts/passwd-start-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-start
mv /opt/scripts/passwd-end-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-end
ucount=$(diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 | wc -l)
if [ $ucount -gt 0 ]
then
  SUBJECT="ATTENTION: New User Account is created on server : `date --date='yesterday' '+%b %e'`"
  MESSAGE="/tmp/new-user-logs.txt"
  TO="[email protected]"
  echo  "Hostname: `hostname`" >> $MESSAGE
  echo -e "\n" >> $MESSAGE
  echo "The New User Details are below." >> $MESSAGE
  echo "+------------------------------+" >> $MESSAGE
  diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 >>  $MESSAGE
  echo "+------------------------------+" >> $MESSAGE
  mail -s "$SUBJECT" "$TO" < $MESSAGE
  rm $MESSAGE
fi 

new-user-detail.sh 文件添加可执行权限。

$ chmod +x /opt/scripts/new-user-detail.sh

最后添加一个 cron 任务来自动执行此操作。它在每天早上 7 点运行。

# crontab -e

0 7 * * * /bin/bash /opt/scripts/new-user.sh

注意:你会在每天早上 7 点都会收到一封关于昨日详情的邮件提醒。

输出:输出与下面的输出相同。

# cat /tmp/new-user-logs.txt

Hostname: CentOS.2daygeek.com

The New User Details are below.
+------------------------------+
tuser3
+------------------------------+

via: https://www.2daygeek.com/linux-shell-script-to-monitor-user-creation-send-email/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

大多数 Linux 管理员使用 SAR 报告监控系统性能,因为它会收集一周的性能数据。但是,你可以通过更改 /etc/sysconfig/sysstat 文件轻松地将其延长到四周。同样,这段时间可以延长一个月以上。如果超过 28,那么日志文件将放在多个目录中,每月一个。

要将覆盖期延长至 28 天,请对 /etc/sysconfig/sysstat 文件做以下更改。

编辑 sysstat 文件并将 HISTORY=7 更改为 HISTORY=28

在本文中,我们添加了三个 bash 脚本,它们可以帮助你在一个地方轻松查看每个数据文件的平均值。

我们过去加过许多有用的 shell 脚本。如果你想查看它们,请进入下面的链接。

这些脚本简单明了。出于测试目的,我们仅包括两个性能指标,即 CPU 和内存。你可以修改脚本中的其他性能指标以满足你的需求。

脚本 1:从 SAR 报告中获取平均 CPU 利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集 CPU 平均值并将其显示在一个页面上。

由于是月末,它显示了 2019 年 8 月的 28 天数据。

# vi /opt/scripts/sar-cpu-avg.sh

#!/bin/sh

echo "+----------------------------------------------------------------------------------+"
echo "|Average:         CPU     %user     %nice   %system   %iowait    %steal     %idle  |"
echo "+----------------------------------------------------------------------------------+"

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    dat=`sar -f $file | head -n 1 | awk '{print $4}'`
    echo -n $dat
    sar -f $file  | grep -i Average | sed "s/Average://"
done

echo "+----------------------------------------------------------------------------------+"

运行脚本后,你将看到如下输出。

# sh /opt/scripts/sar-cpu-avg.sh

+----------------------------------------------------------------------------------+
|Average:         CPU     %user     %nice   %system   %iowait    %steal     %idle  |
+----------------------------------------------------------------------------------+
08/01/2019        all      0.70      0.00      1.19      0.00      0.00     98.10
08/02/2019        all      1.73      0.00      3.16      0.01      0.00     95.10
08/03/2019        all      1.73      0.00      3.16      0.01      0.00     95.11
08/04/2019        all      1.02      0.00      1.80      0.00      0.00     97.18
08/05/2019        all      0.68      0.00      1.08      0.01      0.00     98.24
08/06/2019        all      0.71      0.00      1.17      0.00      0.00     98.12
08/07/2019        all      1.79      0.00      3.17      0.01      0.00     95.03
08/08/2019        all      1.78      0.00      3.14      0.01      0.00     95.08
08/09/2019        all      1.07      0.00      1.82      0.00      0.00     97.10
08/10/2019        all      0.38      0.00      0.50      0.00      0.00     99.12
.
.
.
08/29/2019        all      1.50      0.00      2.33      0.00      0.00     96.17
08/30/2019        all      2.32      0.00      3.47      0.01      0.00     94.20
+----------------------------------------------------------------------------------+

脚本 2:从 SAR 报告中获取平均内存利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集内存平均值并将其显示在一个页面上。

由于是月末,它显示了 2019 年 8 月的 28 天数据。

# vi /opt/scripts/sar-memory-avg.sh

#!/bin/sh

echo "+-------------------------------------------------------------------------------------------------------------------+"
echo "|Average:       kbmemfree kbmemused  %memused kbbuffers kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty  |"
echo "+-------------------------------------------------------------------------------------------------------------------+"

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    dat=`sar -f $file | head -n 1 | awk '{print $4}'`
    echo -n $dat
    sar -r -f $file  | grep -i Average | sed "s/Average://"
done

echo "+-------------------------------------------------------------------------------------------------------------------+"

运行脚本后,你将看到如下输出。

# sh /opt/scripts/sar-memory-avg.sh

+--------------------------------------------------------------------------------------------------------------------+
|Average:        kbmemfree kbmemused  %memused kbbuffers kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty  |
+--------------------------------------------------------------------------------------------------------------------+
08/01/2019      1492331   2388461     61.55     29888   1152142   1560615     12.72   1693031    380472         6
08/02/2019      1493126   2387666     61.53     29888   1147811   1569624     12.79   1696387    373346         3
08/03/2019      1489582   2391210     61.62     29888   1147076   1581711     12.89   1701480    370325         3
08/04/2019      1490403   2390389     61.60     29888   1148206   1569671     12.79   1697654    373484         4
08/05/2019      1484506   2396286     61.75     29888   1152409   1563804     12.75   1702424    374628         4
08/06/2019      1473593   2407199     62.03     29888   1151137   1577491     12.86   1715426    371000         8
08/07/2019      1467150   2413642     62.19     29888   1155639   1596653     13.01   1716900    372574        13
08/08/2019      1451366   2429426     62.60     29888   1162253   1604672     13.08   1725931    376998         5
08/09/2019      1451191   2429601     62.61     29888   1158696   1582192     12.90   1728819    371025         4
08/10/2019      1450050   2430742     62.64     29888   1160916   1579888     12.88   1729975    370844         5
.
.
.
08/29/2019      1365699   2515093     64.81     29888   1198832   1593567     12.99   1781733    376157        15
08/30/2019      1361920   2518872     64.91     29888   1200785   1595105     13.00   1784556    375641         8
+-------------------------------------------------------------------------------------------------------------------+

脚本 3:从 SAR 报告中获取 CPU 和内存平均利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集 CPU 和内存平均值并将其显示在一个页面上。

该脚本与上面相比稍微不同。它在同一位置同时显示两者(CPU 和内存)平均值,而不是其他数据。

# vi /opt/scripts/sar-cpu-mem-avg.sh

#!/bin/bash

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    sar -f $file | head -n 1 | awk '{print $4}'
    echo "-----------"
    sar -u -f $file | awk '/Average:/{printf("CPU Average: %.2f%\n"), 100 - $8}'
    sar -r -f $file | awk '/Average:/{printf("Memory Average: %.2f%\n"),(($3-$5-$6)/($2+$3)) * 100 }'
    printf "\n"
done

运行脚本后,你将看到如下输出。

# sh /opt/scripts/sar-cpu-mem-avg.sh

08/01/2019
-----------
CPU Average: 1.90%
Memory Average: 31.09%

08/02/2019
-----------
CPU Average: 4.90%
Memory Average: 31.18%

08/03/2019
-----------
CPU Average: 4.89%
Memory Average: 31.29%

08/04/2019
-----------
CPU Average: 2.82%
Memory Average: 31.24%

08/05/2019
-----------
CPU Average: 1.76%
Memory Average: 31.28%
.
.
.
08/29/2019
-----------
CPU Average: 3.83%
Memory Average: 33.15%

08/30/2019
-----------
CPU Average: 5.80%
Memory Average: 33.19%

via: https://www.2daygeek.com/linux-get-average-cpu-memory-utilization-from-sar-data-report/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

作为系统更新的一部分,你也许需要在基于 Red Hat 系统中由于应用依赖排除一些软件包。

如果是,如何排除?可以采取多少种方式?有三种方式可以做到,我们会在本篇中教你这三种方法。

包管理器是一组工具,它允许用户在 Linux 系统中轻松管理包。它能让用户在 Linux 系统中安装、更新/升级、删除、查询、重新安装和搜索软件包。

对于基于 Red Hat 的系统,我们使用 yum 包管理器rpm 包管理器 进行包管理。

什么是 yum?

yum 代表 “Yellowdog Updater, Modified”。Yum 是用于 rpm 系统的自动更新程序和包安装/卸载器。

它在安装包时自动解决依赖关系。

什么是 rpm?

rpm 代表 “Red Hat Package Manager”,它是一款用于 Red Hat 系统的功能强大的包管理工具。

RPM 指的是 .rpm 文件格式,它包含已编译的软件和必要的库。

你可能有兴趣阅读以下与本主题相关的文章。如果是的话,请进入相应的链接。

方法 1:手动或临时用 yum 命令排除包

我们可以在 yum 中使用 --exclude-x 开关来阻止 yum 命令获取特定包的更新。

我可以说,这是一种临时方法或按需方法。如果你只想将特定包排除一次,那么我们可以使用此方法。

以下命令将更新除 kernel 之外的所有软件包。

要排除单个包:

# yum update --exclude=kernel
或者
# yum update -x 'kernel'

要排除多个包。以下命令将更新除 kernel 和 php 之外的所有软件包。

# yum update --exclude=kernel* --exclude=php*
或者
# yum update --exclude httpd,php

方法 2:在 yum 命令中永久排除软件包

这是永久性方法,如果你经常执行修补程序更新,那么可以使用此方法。

为此,请在 /etc/yum.conf 中添加相应的软件包以永久禁用软件包更新。

添加后,每次运行 yum update 命令时都不需要指定这些包。此外,这可以防止任何意外更新这些包。

# vi /etc/yum.conf

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3
exclude=kernel* php*

方法 3:使用 Yum versionlock 插件排除包

这也是与上面类似的永久方法。Yum versionlock 插件允许用户通过 yum 命令锁定指定包的更新。

为此,请运行以下命令。以下命令将从 yum update 中排除 freetype 包。

或者,你可以直接在 /etc/yum/pluginconf.d/versionlock.list 中添加条目。

# yum versionlock add freetype

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos, subscription-manager, verify, versionlock
Adding versionlock on: 0:freetype-2.8-12.el7
versionlock added: 1

运行以下命令来检查被 versionlock 插件锁定的软件包列表。

# yum versionlock list

Loaded plugins: changelog, package_upload, product-id, search-disabled-repos, subscription-manager, verify, versionlock
0:freetype-2.8-12.el7.*
versionlock list done

运行以下命令清空该列表。

# yum versionlock clear

via: https://www.2daygeek.com/redhat-centos-yum-update-exclude-specific-packages/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Sed 代表 流编辑器 Stream Editor ,常用于 Linux 中基本的文本处理。sed 命令是 Linux 中的重要命令之一,在文件处理方面有着重要作用。可用于删除或移动与给定模式匹配的特定行。

它还可以删除文件中的特定行,它能够从文件中删除表达式,文件可以通过指定分隔符(例如逗号、制表符或空格)进行标识。

本文列出了 15 个使用范例,它们可以帮助你掌握 sed 命令。

如果你能理解并且记住这些命令,在你需要使用 sed 时,这些命令就能派上用场,帮你节约很多时间。

注意:为了方便演示,我在执行 sed 命令时,不使用 -i 选项(因为这个选项会直接修改文件内容),被移除了行的文件内容将打印到 Linux 终端。

但是,如果你想在实际环境中从源文件中删除行,请在 sed 命令中使用 -i 选项。

演示之前,我创建了 sed-demo.txt 文件,并添加了以下内容和相应行号以便更好地理解。

# cat sed-demo.txt

1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

1) 如何删除文件的第一行?

使用以下语法删除文件首行。

N 表示文件中的第 N 行,d 选项在 sed 命令中用于删除一行。

语法:

sed 'Nd' file

使用以下 sed 命令删除 sed-demo.txt 中的第一行。

# sed '1d' sed-demo.txt

2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

2) 如何删除文件的最后一行?

使用以下语法删除文件最后一行。

$ 符号表示文件的最后一行。

使用以下 sed 命令删除 sed-demo.txt 中的最后一行。

# sed '$d' sed-demo.txt

1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu

3) 如何删除指定行?

使用以下 sed 命令删除 sed-demo.txt 中的第 3 行。

# sed '3d' sed-demo.txt

1 Linux Operating System
2 Unix Operating System
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

4) 如何删除指定范围内的行?

使用以下 sed 命令删除 sed-demo.txt 中的第 5 到 7 行。

# sed '5,7d' sed-demo.txt

1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
8 Debian
9 Ubuntu
10 openSUSE

5) 如何删除多行内容?

sed 命令能够删除给定行的集合。

本例中,下面的 sed 命令删除了第 1 行、第 5 行、第 9 行和最后一行。

# sed '1d;5d;9d;$d' sed-demo.txt

2 Unix Operating System
3 RHEL
4 Red Hat
6 Arch Linux
7 CentOS
8 Debian

5a) 如何删除指定范围以外的行?

使用以下 sed 命令删除 sed-demo.txt 中第 3 到 6 行范围以外的所有行。

# sed '3,6!d' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux

6) 如何删除空行?

使用以下 sed 命令删除 sed-demo.txt 中的空行。

# sed '/^$/d' sed-demo.txt

1 Linux Operating System
2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

7) 如何删除包含某个模式的行?

使用以下 sed 命令删除 sed-demo.txt 中匹配到 System 模式的行。

# sed '/System/d' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

8) 如何删除包含字符串集合中某个字符串的行?

使用以下 sed 命令删除 sed-demo.txt 中匹配到 SystemLinux 表达式的行。

# sed '/System\|Linux/d' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

9) 如何删除以指定字符开头的行?

为了测试,我创建了 sed-demo-1.txt 文件,并添加了以下内容。

# cat sed-demo-1.txt

Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6

使用以下 sed 命令删除以 R 字符开头的所有行。

# sed '/^R/d' sed-demo-1.txt

Linux Operating System
Unix Operating System
Fedora
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6

使用以下 sed 命令删除 R 或者 F 字符开头的所有行。

# sed '/^[RF]/d' sed-demo-1.txt

Linux Operating System
Unix Operating System
debian
ubuntu
Arch Linux - 1
2 - Manjaro
3 4 5 6

10) 如何删除以指定字符结尾的行?

使用以下 sed 命令删除 m 字符结尾的所有行。

# sed '/m$/d' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

使用以下 sed 命令删除 x 或者 m 字符结尾的所有行。

# sed '/[xm]$/d' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

11) 如何删除所有大写字母开头的行?

使用以下 sed 命令删除所有大写字母开头的行。

# sed '/^[A-Z]/d' sed-demo-1.txt

debian
ubuntu
2 - Manjaro
3 4 5 6

12) 如何删除指定范围内匹配模式的行?

使用以下 sed 命令删除第 1 到 6 行中包含 Linux 表达式的行。

# sed '1,6{/Linux/d;}' sed-demo.txt

2 Unix Operating System
3 RHEL
4 Red Hat
5 Fedora
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

13) 如何删除匹配模式的行及其下一行?

使用以下 sed 命令删除包含 System 表达式的行以及它的下一行。

# sed '/System/{N;d;}' sed-demo.txt

3 RHEL
4 Red Hat
5 Fedora
6 Arch Linux
7 CentOS
8 Debian
9 Ubuntu
10 openSUSE

14) 如何删除包含数字的行?

使用以下 sed 命令删除所有包含数字的行。

# sed '/[0-9]/d' sed-demo-1.txt

Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu

使用以下 sed 命令删除所有以数字开头的行。

# sed '/^[0-9]/d' sed-demo-1.txt

Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
Arch Linux - 1

使用以下 sed 命令删除所有以数字结尾的行。

# sed '/[0-9]$/d' sed-demo-1.txt

Linux Operating System
Unix Operating System
RHEL
Red Hat
Fedora
debian
ubuntu
2 - Manjaro

15) 如何删除包含字母的行?

使用以下 sed 命令删除所有包含字母的行。

# sed '/[A-Za-z]/d' sed-demo-1.txt

3 4 5 6

via: https://www.2daygeek.com/linux-remove-delete-lines-in-file-sed-command/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:hello-wn 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我们收到很多来自用户的电子邮件,要我们写一篇关于 GNOME 3 桌面自定义的文章,但是,我们没有时间来写这个主题。

在很长时间内,我一直在我的主要笔记本电脑上使用 Ubuntu 操作系统,并且,渐感无聊,我想测试一些与 Arch Linux 相关的其它的发行版。

我比较喜欢 Majaro,我在我的笔记本电脑中安装使用了 GNOME 3 桌面的 Manjaro 18.0 。

我按照我想要的自定义我的桌面。所以,我想抓住这个机会来详细撰写这篇文章,以帮助其他人。

这篇文章帮助其他人来轻松地自定义他们的桌面。

我不打算包括我所有的自定义,并且,我将强制性地添加一个对 Linux 桌面用户来说有用的必要的东西。

如果你觉得这篇文章中缺少一些调整,请你在评论区提到缺少的东西。对其它用户来说这是非常有用的 。

1) 如何在 GNOME 3 桌面中启动活动概述?

活动概述将显示所有运行的应用程序,或通过单击 Super 键 ,或在左上角上单击“活动”按钮来启动/打开窗口。

它允许你来启动一个新的应用程序、切换窗口,和在工作空间之间移动窗口。

你可以通过选择如下任一操作简单地退出活动概述,如选择一个窗口、应用程序或工作区间,或通过按 Super 键或 Esc 键。

活动概述屏幕截图

2) 如何在 GNOME 3 桌面中重新调整窗口大小?

通过下面的组合键来将启动的窗口最大化、取消最大化,并吸附到屏幕的一侧(左侧或右侧)。

  • Super Key+下箭头:来非最大化窗口。
  • Super Key+上箭头:来最大化窗口。
  • Super Key+右箭头:来在填充半个屏幕的右侧窗口。
  • Super Key+作箭头:来在填充半个屏幕的左侧窗口。

使用 Super Key+下箭头 来取消最大化窗口。

使用 Super Key+上箭头 来最大化窗口。

使用 Super Key+右箭头 来在填充半个屏幕的右侧窗口。

使用 Super Key+左箭头 来在填充半个屏幕的左侧窗口。

这个功能将帮助你可以一次查看两个应用程序,又名,拆分屏幕。

3) 如何在 GNOME 3 桌面中显示应用程序?

在 Dash 中,单击“显示应用程序网格”按钮来显示在你的系统上的所有已安装的应用程序。

4) 如何在 GNOME 3 桌面中的 Dash 中添加应用程序?

为加速你的日常活动,你可能想要把频繁使用的应用程序添加到 Dash 中,或拖拽应用程序启动器到 Dash 中。

它将允许你直接启动你的收藏夹中的应用程序,而不用先去搜索应用程序。为做到这样,在应用程序上简单地右击,并使用选项“添加到收藏夹”。

为从 Dash 中移除一个应用程序启动器(收藏的程序),要么从 Dash 中拖拽应用程序到网格按钮,或者在应用程序上简单地右击,并使用选项“从收藏夹中移除”。

5) 如何在 GNOME 3 桌面中的工作区间之间切换?

工作区间允许你将窗口组合在一起。它将帮助你恰当地分隔你的工作。如果你正在做多项工作,并且你想对每项工作和相关的事物进行单独地分组,那么,它将是非常便利的,对你来说是一个非常方便和完美的选项。

你可以用两种方法切换工作区间,打开活动概述,并从右手边选择一个工作区间,或者使用下面的组合键。

  • 使用 Ctrl+Alt+Up 切换到上一个工作区间。
  • 使用 Ctrl+Alt+Down 切换到下一个工作区间。

6) 如何在 GNOME 3 桌面中的应用程序之间切换 (应用程序切换器) ?

使用 Alt+TabSuper+Tab 来在应用程序之间切换。为启动应用程序切换器,使用 Alt+TabSuper+Tab

在启动后,只需要按住 AltSuper 键,按 Tab 键来从左到右的依次移动接下来的应用程序。

7) 如何在 GNOME 3 桌面中添加用户姓名到顶部面板?

如果你想添加你的用户姓名到顶部面板,那么安装下面的添加用户姓名到顶部面板 GNOME 扩展。

8) 如何在 GNOME 3 桌面中添加微软 Bing 的桌面背景?

安装下面的 Bing 桌面背景更换器 GNOME shell 扩展,来每天更改你的桌面背景为微软 Bing 的桌面背景。

9) 如何在 GNOME 3 桌面中启用夜光?

夜光应用程序是著名的应用程序之一,它通过在日落后把你的屏幕从蓝光调成暗黄色,来减轻眼睛疲劳。

它在智能手机上也可用。相同目标的其它已知应用程序是 flux 和 redshift

为启用这个特色,导航到系统设置 >> 设备 >> 显示 ,并打开夜光。

在它启用后,状态图标将被放置到顶部面板上。

10) 如何在 GNOME 3 桌面中显示电池百分比?

电池百分比将向你精确地显示电池使用情况。为启用这个功能,遵循下面的步骤。

启动 GNOME Tweaks >> 顶部栏 >> 电池百分比 ,并打开它。

在修改后,你能够在顶部面板上看到电池百分比图标。

11) 如何在 GNOME 3 桌面中启用鼠标右键单击?

在 GNOME 3 桌面环境中右键单击是默认禁用的。为启用这个特色,遵循下面的步骤。

启动 GNOME Tweaks >> 键盘和鼠标 >> 鼠标点击硬件仿真,并选择“区域”选项。

12) 如何在 GNOME 3 桌面中启用单击最小化?

启用单击最小化功能,这将帮助我们最小化打开的窗口,而不必使用最小化选项。

$ gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'

13) 如何在 GNOME 3 桌面中自定义 Dock ?

如果你想更改你的 Dock,类似于 Deepin 桌面或 Mac 桌面,那么使用下面的一组命令。

$ gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM
$ gsettings set org.gnome.shell.extensions.dash-to-dock extend-height false
$ gsettings set org.gnome.shell.extensions.dash-to-dock transparency-mode FIXED
$ gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 50

14) 如何在 GNOME 3桌面中显示桌面?

默认 Super 键 + D 快捷键不能显示你的桌面。为配置这种情况,遵循下面的步骤。

设置 >> 设备 >> 键盘 >> 单击在导航下的 隐藏所有普通窗口 ,然后按 Super 键 + D ,最后按设置按钮来启用它。

15) 如何自定义日期和时间格式?

GNOME 3 默认用 Sun 04:48 的格式来显示日期和时间。它并不清晰易懂,如果你想获得以下格式的输出:Sun Dec 2 4:49 AM ,遵循下面的步骤。

对于日期修改: 打开 GNOME Tweaks >> 顶部栏 ,并在时钟下启用“星期”选项。

对于时间修改: 设置 >> 具体情况 >> 日期和时间 ,然后,在时间格式中选择 AM/PM 选项。

在修改后,你能够看到与下面相同的日期和时间格式。

16) 如何在启动程序中永久地禁用不使用的服务?

就我来说,我不使用 蓝牙 & cups(打印机服务)。因此,在我的笔记本电脑上禁用这些服务。为在基于 Arch 的系统上禁用服务,使用 Pacman 软件包管理器

对于蓝牙:

$ sudo systemctl stop bluetooth.service
$ sudo systemctl disable bluetooth.service
$ sudo systemctl mask bluetooth.service
$ systemctl status bluetooth.service

对于 cups:

$ sudo systemctl stop org.cups.cupsd.service
$ sudo systemctl disable org.cups.cupsd.service
$ sudo systemctl mask org.cups.cupsd.service
$ systemctl status org.cups.cupsd.service

最后,使用以下命令验证这些服务是否在启动程序中被禁用。如果你想再次确认这一点,你可以重新启动一次,并检查相同的东西。导航到以下链接来了解更多关于 systemctl 的用法,

$ systemctl list-unit-files --type=service | grep enabled
[email protected] enabled
dbus-org.freedesktop.ModemManager1.service enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service enabled
display-manager.service enabled
gdm.service enabled
[email protected] enabled
linux-module-cleanup.service enabled
ModemManager.service enabled
NetworkManager-dispatcher.service enabled
NetworkManager-wait-online.service enabled
NetworkManager.service enabled
systemd-fsck-root.service enabled-runtime
tlp-sleep.service enabled
tlp.service enabled

17) 在 GNOME 3 桌面中安装图标和主题?

有大量的图标和主题可供 GNOME 桌面使用,因此,选择吸引你的 GTK 主题图标主题


via: https://www.2daygeek.com/how-to-customize-the-gnome-3-desktop/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:robsean 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出