请帮我弄清楚这个命令的作用是什么?

请帮我弄清楚这个命令的作用是什么?

我在 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 没有找到任何可以替代的东西,它也会返回零,所以这几乎总是会发生

最后的\使它忽略换行符,因此下一行的命令也会被执行,除非有什么东西不起作用

所以基本上它是更改requiredoptional删除额外的空格,但希望这可以帮助您弄清楚sed 's/thing/otherThing/'一般情况下的作用

相关内容