Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix sed用法无法理解_Unix_Sed - Fatal编程技术网

Unix 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

我遇到过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/hadoop-env.sh

该命令很简单,但由于它使用
-i
选项的方式,它假定GNU
sed
;对于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
选项的方式,它假定GNU
sed
;对于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如果你拆开了字符串中的图案,那就更容易阅读了。非常感谢。这解释了很多。非常感谢。这解释了很多。