Bash 获取错误:sed:-e表达式#1,字符2:未知命令:`.&x27;

Bash 获取错误:sed:-e表达式#1,字符2:未知命令:`.&x27;,bash,shell,sed,Bash,Shell,Sed,编辑:修正。现在关注优化代码 我正在编写一个脚本,将数据从一个文件分离到多个文件中。当我运行脚本时,会出现错误:“sed:-e expression#1,char 2:unknown command:`.”没有任何行号,这使得调试有些困难。我已经检查了我单独使用sed的行,它们工作正常。有什么想法吗?我意识到有很多事情是我做得有点不合常规的,而且有更快的方法来做一些事情(我确信有一种方法可以避免持续导入某些文件),但现在我只是想理解这个错误。代码如下: x1=$(sed -n '1p' <

编辑:修正。现在关注优化代码

我正在编写一个脚本,将数据从一个文件分离到多个文件中。当我运行脚本时,会出现错误:“sed:-e expression#1,char 2:unknown command:`.”没有任何行号,这使得调试有些困难。我已经检查了我单独使用sed的行,它们工作正常。有什么想法吗?我意识到有很多事情是我做得有点不合常规的,而且有更快的方法来做一些事情(我确信有一种方法可以避免持续导入某些文件),但现在我只是想理解这个错误。代码如下:

x1=$(sed -n '1p' < somefile | cut -f1)
y1=$(sed -n '1p' < somefile | cut -f2)
p='p'
for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 
do
  x2=$(sed -n $i$p < somefile | cut -f1)
  y2=$(sed -n $i$p < somefile | cut -f1)
  if [ "$x1" = "$x2" ] && [ "$y1" = "$y2" ];
  then
    x1=$x2
    y1=$x2
  fi
  s="$(sed -n $i$p < somefile | cut -f3) $(sed -n $i$p < somefile | cut$
  echo $s >> "$x1-$y1.txt"
done
x1=$(sed-n'1p'>“$x1-$y1.txt”
完成

这就是问题的原因:

for i in 1..$(seq 1 $(cat "somefile" | wc -l))
试试看

for i in $(seq 1 $(wc -l < somefile))
以美元表示的i的
(seq 1$(wc-l
但是,您使用所有这些sed命令读取文件的次数太多了。请仅读取一次:

read x1 y1 < <(sed 1q somefile)
while read x2 y2 f3 f4; do
    if [[ $x1 = $x2 && $y1 = $y2 ]]; then
        x1=$x2
        y1=$x2
    fi
    echo "$f3 $f4"
done < somefile > "$x1-$y1.txt"
读取x1 y1<“$x1-$y1.txt”
构造
s
变量的行被截断了——我假设每行有4个字段


注意:剪切粘贴编码的一个问题是引入了错误:您将
y2
指定为与
x2

相同的字段。问题出现在以下行中:

for i in 1..$(seq 1 $(cat "somefile" | wc -l)) 
如果
somefile
有3行,那么这将导致
i
的以下值:

1..1
2
3
显然,类似于
sed-n1..1p
的内容会导致您观察到的错误:
sed:-e expression#1,char 2:unknown command:'。

你宁愿:

for i in $(seq 1 $(cat "somefile" | wc -l)) 

谢谢。非常感谢。您的更正应该也会大大加快速度。现在它给了我:script2.sh:1:script2.sh:语法错误:重定向意外。知道为什么吗?另外,实际上我没有剪切和粘贴。我只是忘记了我正在看的是哪一个。不过谢谢您指出这一点。我也没有领会。你:““意外重定向”--您使用哪个解释器来执行脚本?sh或bash?提示:搜索stackoverflow以查找字符串
“意外重定向”
我已经尝试将#!/bin/bash添加到顶部,但没有解决任何问题时,将其切换到#!/bin/sh。两个字符串都出现了错误。