![请帮我弄清楚这个命令的作用是什么?](https://linux22.com/image/205134/%E8%AF%B7%E5%B8%AE%E6%88%91%E5%BC%84%E6%B8%85%E6%A5%9A%E8%BF%99%E4%B8%AA%E5%91%BD%E4%BB%A4%E7%9A%84%E4%BD%9C%E7%94%A8%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我在 stackoverflow 上看到了一个用于修复运行 cron 作业时出现问题的命令。 https://stackoverflow.com/questions/21926465/issues-running-cron-in-docker-on- Different-hosts 我不确定这个命令到底是做什么的,因为我是 unix 命令的新手。有哪位高人能说出每个部分的作用吗?
sed --regexp-extended --in-place 's/^session\s+required\s+pam_loginuid.so$/session optional pam_loginuid.so/' /etc/pam.d/crond
答案1
sed
是一个命令行文本编辑器,使用方式如下sed -flags command file
,最常用于使用正则表达式进行查找和替换。我发现它可以做很多事情https://www.grymoire.com/Unix/Sed.html成为一个好的初学者指南(比man
页面更友好)
正则表达式 (regex) 有点像复杂的通配符系统,可让您查找文本模式而不是特定事物
--regexp-extended
告诉它使用扩展正则表达式,它具有更多功能
--in-place
告诉它更改文件,而不是将输出打印到 shell 或 stdout
's/foo/bar'
是 sed 的替代命令(s 代表替代),它找到每一行的第一个 'foo' 并将其交换为 'bar'
^session
:^
表示正则表达式中行的开头
\s+
:\s
表示“任何空白”,即正则表达式中的空格或制表符或类似字符;+
表示一个或多个,因此它匹配一个或多个空格/制表符/等。+
需要扩展正则表达式
...nuid.so$
:$
表示正则表达式中的行尾
因此,这是找到文件中类似session optional pam_loginuid.so
但具有更多空格/制表符的每一行,并将其替换为session optional pam_loginuid.so
一个空格,并required
替换为optional
, 在文件中/etc/pam.d/crond
这&&
意味着“如果此命令返回零,则运行下一个命令”,并且 bash 中的大多数内容如果不崩溃,则返回零。即使 sed 没有找到任何可以替代的东西,它也会返回零,所以这几乎总是会发生
最后的\
使它忽略换行符,因此下一行的命令也会被执行,除非有什么东西不起作用
所以基本上它是更改required
并optional
删除额外的空格,但希望这可以帮助您弄清楚sed 's/thing/otherThing/'
一般情况下的作用