Unix sed用法无法理解
我遇到过unix sed命令的用法,但无法理解它的作用。你能帮我了解一下这个用法吗?如果可能,请分享一些参考资料,以了解sed命令的此类用法Unix sed用法无法理解,unix,sed,Unix,Sed,我遇到过unix sed命令的用法,但无法理解它的作用。你能帮我了解一下这个用法吗?如果可能,请分享一些参考资料,以了解sed命令的此类用法 sed -i '/^export JAVA_HOME/ s:.*:export JAVA_HOME=/usr/java/default\nexport HADOOP_PREFIX=/usr/local/hadoop\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_PREFIX/etc/hadoop/had
sed -i '/^export JAVA_HOME/ s:.*:export JAVA_HOME=/usr/java/default\nexport HADOOP_PREFIX=/usr/local/hadoop\nexport HADOOP_HOME=/usr/local/hadoop\n:' $HADOOP_PREFIX/etc/hadoop/hadoop-env.sh
该命令很简单,但由于它使用
-i
选项的方式,它假定GNUsed
;对于macOS Sierra和相关系统,您需要使用-i'
来代替-i
总的来说,它对应于:
sed -i '/Pattern/ s:.*:Replacement:' file
其中:
表示在不创建备份副本的情况下,用编辑的输出覆盖每个输入文件-i
是/Pattern/
;以单词^export JAVA_HOME
开头的一行,然后以单个空格分隔export
JAVA\u HOME
是一个替代命令,使用s:.*:Replacement:
而不是更传统的:
(通常是/
)作为模式分隔符。这样做是因为替换文本包含斜杠。s/*/Replacement/
匹配整行。材料的其余部分将替换原始的*
行。export JAVA_HOME
序列扩展为一个换行符,因此它实际上会在输出中生成许多行\n
文件是
$HADOOP\u PREFIX/etc/HADOOP/HADOOP env.sh
-i
选项的方式,它假定GNUsed
;对于macOS Sierra和相关系统,您需要使用-i'
来代替-i
总的来说,它对应于:
sed -i '/Pattern/ s:.*:Replacement:' file
其中:
表示在不创建备份副本的情况下,用编辑的输出覆盖每个输入文件-i
是/Pattern/
;以单词^export JAVA_HOME
开头的一行,然后以单个空格分隔export
JAVA\u HOME
是一个替代命令,使用s:.*:Replacement:
而不是更传统的:
(通常是/
)作为模式分隔符。这样做是因为替换文本包含斜杠。s/*/Replacement/
匹配整行。材料的其余部分将替换原始的*
行。export JAVA_HOME
序列扩展为一个换行符,因此它实际上会在输出中生成许多行\n
文件是
$HADOOP\u PREFIX/etc/HADOOP/HADOOP env.sh
sed
命令调用。该命令是“流编辑器”的缩写,对于以编程方式修改文件非常有用。您最好阅读手册页(man sed
),但出于指导目的,我在这里对您的特定命令进行了分解:
sed # The command
-i # Edit file in place (no backup)
'/^export JAVA_HOME/ # For every line that begins with 'export JAVA_HOME'...
s: # substitue...
.*: # the entire line with...
export JAVA_HOME=/usr/java/default
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_HOME=/usr/local/hadoop
:' # End of command
$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh # Run on the following file
关注点:
- 命令可以限制在特定的地址范围或作用域内。这里,作用域是一个搜索
- 替换命令几乎可以由任何字符分隔(通常是
),但在这种情况下,选择/
是为了防止文件路径中的:
转义/
表达式被封装在sed
中,以防止变量的外壳扩展。虽然在这种情况下不会发生扩展,但通常会看到表达式被封装在'
中以消除这种可能性'
sed
命令调用。该命令是“流编辑器”的缩写,对于以编程方式修改文件非常有用。您最好阅读手册页(man-sed
),但出于指导目的,我在这里对您的特定命令进行了分解:
sed # The command
-i # Edit file in place (no backup)
'/^export JAVA_HOME/ # For every line that begins with 'export JAVA_HOME'...
s: # substitue...
.*: # the entire line with...
export JAVA_HOME=/usr/java/default
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_HOME=/usr/local/hadoop
:' # End of command
$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh # Run on the following file
关注点:
- 命令可以限制在特定的地址范围或作用域内。这里,作用域是一个搜索
- 替换命令几乎可以由任何字符分隔(通常是
),但在这种情况下,选择/
是为了防止文件路径中的:
转义/
表达式被封装在sed
中,以防止变量的外壳扩展。虽然在这种情况下不会发生扩展,但通常会看到表达式被封装在'
中以消除这种可能性'
sed
感到困惑,或者它的作用是什么?我相信您可以找到大量关于GNU-sed的文档--我对本例中sed的用法感到困惑。它到底起什么作用?如果某个cal帮助分解此命令的逻辑路径,它将替换文件中的一些文本。如果您分解了ap,则更容易阅读艺术字符串中的模式您是否对sed
感到困惑,或者这是做什么的?我相信您可以找到大量关于GNU-sed的文档--我对本例中sed的用法感到困惑。它到底是做什么的?如果某个cal帮助分解此命令的逻辑路径,它将替换文件中的一些文本。它将是e如果你拆开了字符串中的图案,那就更容易阅读了。非常感谢。这解释了很多。非常感谢。这解释了很多。