将文件的一部分替换为当前目录的路径

我有以下文件min.conf,如下所示。我需要将路径目录更改为文件中的当前目录。

输入文件(min.conf)

#!/bin/bash
#
#SBATCH  --workdir=/work/LAS/input

myNAMD2=$(which namd2)
myWork=/work/LAS/input

我有以下代码:

#!/bin/bash

filename="min.conf"

#While loop to read line by line
while IFS= read -r line; do
    #If the line starts with ST then set var to yes.
    if [[ $line == '#SBATCH  --workdir='* ]] || [[ $line == 'myWork='* ]] ; then

    fi
done < "$filename"

所需的输出量(最低配置):

#!/bin/bash
#
#SBATCH  --workdir=/work/input23

myNAMD2=$(which namd2)
myWork=/work/input23
lifelove36 回答:将文件的一部分替换为当前目录的路径

能否请您尝试以下。这里要注意的一点是PWD是一个shell变量,然后通过将其分配给awk变量将其传递给awk

PWD=`pwd`
awk -v pwd="$PWD" '
/mywork/{
  sub(/=.*/,"=" pwd)
}
/SBATCH/{
  sub(/workdir=.*/,"workdir=" pwd)
}
1
' Input_file

如果要将输出保存到Input_file本身,请附加> temp && mv temp Input_file

,

sed 可以做一些您想做的事情:

sed -E '/^(a|b)/s:c:d:g'
  • /^(a|b)/:适用于以ab开头的所有行。
  • s:c:d:g:将所有c替换为d

因此,关于将路径更改为当前路径:

sed -E '/^(#SBATCH --workdir=|myWork=)/s:=\/.*\/:='$PWD'\/:'
  • /^(#SBATCH --workdir=|myWork=)/:适用于所有以#SB..开头的行
  • s:=\/.*\/:=\/'$PWD'\/::用当前工作目录替换目录名称
  • $PWD:在bash中,它是您当前的工作目录; $(pwd)也一样

最后,如果要 sed ,请编辑您的 min.conf 文件:

sed -i~ -E '/^(#SBATCH --workdir=|myWork=)/s:=\/.*\/:='$PWD'\/:' min.conf
  • sed -i~:编辑文件并进行备份
本文链接:https://www.f2er.com/3098114.html

大家都在问