有没有办法在bash脚本中使用sed从csv行中删除字符串?

有没有办法在bash脚本中使用sed从csv行中删除字符串?,csv,sed,Csv,Sed,我有一个scv文件,当前的格式如下: INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want); sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv sed -i -e \ 's/INSERT INTO `kindle_reviews` VALUES

我有一个scv文件,当前的格式如下:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';
我想获得(我想要的东西)并删除每行的“插入kindle_评论”VALUES”部分

我在终端上尝试了一些命令:

sed -i -e 's/INSERT INTO 'kindle_reviews' VALUES //g' Untitled.csv
由于以下错误,此操作不起作用:

sed: 1: "s|</td><td><INSERT INTO ...": unterminated substitute pattern

sed:1:“s |问题是,在本身由撇号分隔的字符串中不能有撇号(
)。请使用以下方法:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';
但您确定这些是撇号吗?您的示例行中有反引号(`):

反引号使其成为有效的MySQL;带撇号的版本则不是。(您也可以找到双引号,例如,
插入到“kindle\u评论”

如果只需要括号(方括号)之间的部分,则更像这样:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';
但前提是括号之间的所有内容都在一行上

但是,如果要将MySQL表中的数据导出到CSV文件中,我不知道您为什么要首先将其作为SQL INSERT命令转储。如果您可以访问原始数据库,您可以直接将其导出为CSV,如下所示:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';

问题是,在本身由撇号分隔的字符串中不能有撇号(

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';
但您确定这些是撇号吗?您的示例行中有反引号(`):

反引号使其成为有效的MySQL;带撇号的版本则不是。(您也可以找到双引号,例如,
插入到“kindle\u评论”

如果只需要括号(方括号)之间的部分,则更像这样:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';
但前提是括号之间的所有内容都在一行上

但是,如果要将MySQL表中的数据导出到CSV文件中,我不知道您为什么要首先将其作为SQL INSERT命令转储。如果您可以访问原始数据库,您可以直接将其导出为CSV,如下所示:

INSERT INTO `kindle_reviews` VALUES (stuff I want); INSERT INTO `kindle_reviews` VALUES (stuff I want);
sed -i -e 's/INSERT INTO '\''kindle_reviews'\'' VALUES //g' Untitled.csv
sed -i -e \
  's/INSERT INTO `kindle_reviews` VALUES (\(.*\)).*$/\1/' 
SELECT *
  FROM `kindle_reviews` 
  INTO OUTFILE '/tmp/kindle_reviews.csv' 
  FIELDS ENCLOSED BY '"' 
  TERMINATED BY ';' 
  ESCAPED BY '"' 
  LINES TERMINATED BY '\r\n';

很好,你已经展示了你的努力,请在你的问题中添加输入和预期输出的样本,然后让我们知道。你在这里期望的确切输出是什么?我想要得到的输出是括号内的值。括号内的数据是csv格式的。这个csv是我想要提取的。很好如果你已经展示了你的努力,请在你的问题中添加输入和预期输出的样本,然后让我们知道。你在这里预期的确切输出是什么?我想要得到的输出是括号内的值。括号内的数据是csv格式的。这个csv是我想要提取的。是的,这个我们从mysql获得的csv为我们提供了msql命令。我正在尝试删除这些命令,这样我们就有了一个没有这些命令的“干净”csv文件。我尝试了上述命令,但该文件保持不变。虽然命令运行时没有任何错误。请参阅编辑。实际的mysql,就像您的第一行一样,可能有反引号(`),而不是撇号(').你说得对!我照你说的做了,得到了我想要的结果。非常感谢你的帮助!另外,关于你的sql命令,我们面临的问题是权限问题。因为我们没有适当的权限,所以无法在终端上运行sql命令。这就是为什么我们求助于csv转储。是的,我们得到的csv是from我们的mysql为我们提供了msql命令。我正在尝试删除这些命令,这样我们就有了一个没有这些命令的“干净”csv文件。我尝试了上述命令,但文件保持不变。虽然命令运行时没有任何错误。请参阅编辑。实际的mysql,就像您的第一行一样,可能有反引号(`),而不是撇号(').你说得对!我照你说的做了,得到了我想要的结果。非常感谢你的帮助!另外,关于你的sql命令,我们面临的问题是权限问题。因为我们没有适当的权限,所以无法在终端上运行sql命令。这就是我们求助于csv转储的原因。