SED 用新行替换空格

SED 用新行替换空格

我有一个如下所示的文本行(“poseidon”后面有一个空格):

/usr/share/geoserver/data_dir/workspaces/poseidon public/odense_kommune/datastore.xml:17:host">a-postgis1.gues.com</entry>

我用它来删除第一个“:”之后的所有内容

filename=$(sed 's/\:.*$//' <<< $myHost)

结果是:

/usr/share/geoserver/data_dir/workspaces/poseidon
public/datastore.xml

它应该是:

/usr/share/geoserver/data_dir/workspaces/poseidon public/datastore.xml

它用新行替换空格

我尝试过几种 SED 选项,但无法找出问题所在。

我这样使用上面的:

filename=$(sed 's/\:.*$//' <<< $myHost)
echo Filnavn : $filename >> filn.txt

答案1

你的sed命令对我有用。

但不需要sed,你可以使用shell参数扩展删除从头到尾的所有内容:

filename=${myHost%%:*}

答案2

使用 cut 代替:

cut -d ':' -f 1

将选择第一个之前的所有内容:

答案3

你的sed命令对我有用。

$ cat test 
/usr/share/geoserver/data_dir/workspaces/poseidon public/odense_kommune     /datastore.xml:17:host">a-postgis1.gues.com</entry>

SED

$ cat test  | sed 's/\:.*//'
/usr/share/geoserver/data_dir/workspaces/poseidon public/odense_kommune/datastore.xml

如果你不能使用sed来解决这个问题,你可以尝试cutawk

$ cat test  | cut -d ':' -f1
/usr/share/geoserver/data_dir/workspaces/poseidon public/odense_kommune/datastore.xml

AWK

$ cat test  | awk -F ':' '{printf $1}'
/usr/share/geoserver/data_dir/workspaces/poseidon public/odense_kommune/datastore.xml

相关内容