前几天我看到了这个:
sed --in-place '/en_US.UTF-8/s/^# //' /etc/locale.gen
我理解除了 之外的所有内容'/en_US.UTF-8/s/^# //'
。我理解en_US.UTF-8
但它周围的内容是什么。它看起来像 RegEx。
答案1
sed # stream editor
--in-place # save changes to same filename
'/en_US.UTF-8/s/^# //' # program/script for sed
/en_US.UTF-8/ # on any line that contains this text
s/^# // # remove any initial 'comment' designator
/etc/locale.gen # filename to be read then replaced
因此它取消注释en_US.UTF-8
文件中的行locale.gen
。
有一个手册页sed
对此进行了解释。网上有很多关于 sed 的介绍,涵盖了这一点。
答案2
我全都明白,除了
'/en_US.UTF-8/s/^# //'
假设这是正确的,它会删除包含某处的#
行开头的和空格。en_US.UTF-8
因此它变成了这样:
# en_US.UTF-8 foo bar
# foo bar en_US.UTF-8
变成这样:
en_US.UTF-8 foo bar
foo bar en_US.UTF-8
分解:
' '
- 命令的正常部分sed
。/en_US.UTF-8/
- 寻找en_US.UTF-8
其中的线条。s
- 替代命令。/^# /
- 正则表达式。如果行以#
空格开头...//
- 空格替换。将 # 和空格变成...无(无字符 - 已删除!)。