2024-04-19 08:05:37 发布
网友
基本上,我想从一个文件中获取输入文本,从该文件中删除一行,然后将输出发送回同一个文件。如果这能让事情更清楚的话。
grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > file_name
但是,当我这样做的时候,我会得到一个空白的文件。 有什么想法吗?
改用sed:
sed -i '/seg[0-9]\{1,\}\.[0-9]\{1\}/d' file_name
您不能这样做,因为bash首先处理重定向,然后执行命令。所以当grep查看文件名时,它已经是空的。不过,您可以使用临时文件。
#!/bin/sh tmpfile=$(mktemp) grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name > ${tmpfile} cat ${tmpfile} > file_name rm -f ${tmpfile}
像这样,考虑使用mktemp来创建tmpfile但注意它不是POSIX。
mktemp
对此类任务使用sponge。它是羊肚菌的一部分。
尝试以下命令:
grep -v 'seg[0-9]\{1,\}\.[0-9]\{1\}' file_name | sponge file_name
改用sed:
您不能这样做,因为bash首先处理重定向,然后执行命令。所以当grep查看文件名时,它已经是空的。不过,您可以使用临时文件。
像这样,考虑使用
mktemp
来创建tmpfile但注意它不是POSIX。对此类任务使用sponge。它是羊肚菌的一部分。
尝试以下命令:
相关问题 更多 >
编程相关推荐