【问题标题】:replace string in a file with a string from within the same file用同一文件中的字符串替换文件中的字符串
【发布时间】:2015-07-31 08:08:18
【问题描述】:

我有一个这样的文件(数十个变量):

PLAY="play"
APPS="/opt/play/apps"
LD_FILER="/data/mysql"
DATA_LOG="/data/log"

我需要一个脚本,它将变量输出到另一个像这样的文件中(它们之间有空格):

PLAY=${PLAY} APPS=${APPS} LD_FILER=${LD_FILER}

有可能吗?

【问题讨论】:

    标签: string bash replace sed


    【解决方案1】:
    sed 's/"\([^"]*"\)"/={\1}/;H;$!d
    x;y/\n/ /;s/.//' YourFile
    

    您的示例不包括最后一行,所以如果这很重要

    sed '/DATA_LOG=/ d
       s/"\([^"]*"\)"/={\1}/;H;$!d
       x;y/\n/ /;s/.//' YourFile
    

    【讨论】:

      【解决方案2】:
      < input sed -e 's/\(.*\)=.*/\1=${\1}/' | tr \\n \ ; echo
      

      【讨论】:

      • 有趣的表达。有什么理由说 tr \\n \ 而不是 [更具可读性] tr "\n" " "
      【解决方案3】:

      我会说:

      $ awk -F= '{printf "%s=${%s} ", $1,$1} END {print ""}' file
      PLAY=${PLAY} APPS=${APPS} LD_FILER=${LD_FILER} DATA_LOG=${DATA_LOG} 
      

      这将遍历文件并以var=${var} 格式和空格一起打印= 之前的内容。最后,它打印一个新行。

      请注意,这会在行尾留下一个尾随空格。如果这很重要,我们可以检查如何改进它。

      【讨论】:

        猜你喜欢
        • 2021-11-18
        • 2011-07-01
        • 2019-12-07
        • 2017-09-04
        • 2013-04-10
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多