sed命令导致未终止的地址正则表达式

时间:2017-09-20 14:08:48

标签: bash sed

我试图在linux中使用sed命令搜索并替换字符串,但在STDERR中不断出现错误,例如

sed: -e expression #1, char 53: unterminated address regex

这是做什么的:

string="SOMEFILE.TXT SOMEFILE2.TXT SOMEFILE3.TXT"
path="/path/to/file/"
replace="TXT \] || \[ ${path}SOME"
formatted_string=`echo ${string} | sed -e "/TXT SOME/${replace}/g"`

if [ -e ${path}/${formatted_string} ]; then

最终目标是将一个格式化的字符串插入到if命令中,以查找一个或多个文件(如果存在)。带有文件的字符串可能会有所不同,这就是我这样做的原因。上面的代码有效,它确实找到了文件,但我无法摆脱错误。

感谢您的帮助

4 个答案:

答案 0 :(得分:1)

正确的方式

array=( "SOMEFILE.TXT" "SOMEFILE2.TXT" "SOMEFILE3.TXT")
path_to_file="/path/to/file/"

file_exist=
for filename in "@{array[@]}"; do
    if [ -e "${path_to_file}/${filename}" ]; then
        file_exist=1
    fi
done

if [ -n "${file_exist:+X}" ]; then
...

或更短(单行)

shopt -s extglob
if [ -e "/file/to/path/"@("SOMEFILE.TXT"|"SOMEFILE2.TXT"|"SOMEFILE3.TXT") ]; then

答案 1 :(得分:0)

你能试试这段代码吗?

string="SOMEFILE.TXT SOMEFILE2.TXT SOMEFILE3.TXT"
path="\/path\/to\/file\/"
replace="TXT \] || \[ ${path}SOME"
formatted_string=`echo ${string} | sed -e "s/TXT SOME/${replace}/g"`

echo $formatted_string

答案 2 :(得分:0)

听起来你需要的只是:

shopt -s nullglob
files=(/path/to/file/SOMEFILE*.TXT)
if [ ${#files[@]} -gt 0 ]; then
    at least one file exists so do whatever...
fi

或者如果您想对文件列表执行某些操作:

var orderItemIds = shipment.ShipmentItems.Select(si => si.OrderItemId).ToList();
var shippedItems = shipment.Order.OrderItems.Where(oi => !orderItemIds.Contains(oi.Id));

答案 3 :(得分:-1)

感谢您的帮助!我最终完全省略了sed命令并找到了更实用的解决方案:

string="/path/to/file/SOMEFILE*.TXT"
files=$(ls ${string} 2> /dev/null | wc -l)
if [ **"$files" != "0"** ]; then

这就是我所需要的,并且比我之前尝试做的更容易阅读。