linux - 将函数的返回值保存在文件中

标签 linux bash shell

我想从文件中删除$ temp中存储的特定行。
我这样做的方法是排成一行,然后覆盖原始文件。
这是我正在使用的功能

cat actual.dat| cut -f2 -d ' '| sed -n "/$temp/!p"  actual.dat


如果使用cat,它将为我返回理想的格式,
自然,我会像这样继续下去,但由于某些语法错误或idk而无法正常工作。

cat actual.dat| cut -f2 -d ' '| sed -n "/$temp/!p"  actual.dat > actual.dat


如果我将函数的返回值保存在变量中,则会丢失所有\ n-s,并且所有内容都将在同一行中,这是我想避免的。

我该怎么做呢?

最佳答案

您的脚本有几个问题。


用文件名调用sed时,它不再读取stdin形式。因此,管道的所有剩余内容(|)都将被忽略并仅打印出来。
您不能cat在同一管道中将文件写入>,因为>cat读取文件之前先删除内容。


似乎您必须在第二个字段($temp)中找到cut -f2 -d ' '中的值,以指示要删除的行。

一种解决方案是使用grep查找行号,然后使用sed删除该行。



linenumber=$( cat actual.dat | cut -f2 -d ' ' | grep -n -m1 "$temp" | cut -f1 -d: )
sed -i "$linenumber"'d' actual.dat




编辑:我刚刚意识到,如果找不到任何行,上面的脚本将删除所有行

更好:

deletelines=$( cat actual.dat | cut -f2 -d ' ' | grep -n "$temp" | cut -f1 -d: | sed 's/$/d/' | tr '\n' ';')
sed -i "$deletelines" actual.dat


(如果deletelines找到第10行和第15行,则10d;15d;将包含grep

相关文档为:


  -n
      - 电话号码
       在输出的每一行之前在其输入文件中添加行号作为前缀。


man grep


  -i [SUFFIX],-in-place [= SUFFIX]
  在适当位置编辑文件(如果提供扩展名,则进行备份)。默认操作模式为>,以断开符号链接和硬链接。可以使用--follow-symlinks和--copy进行更改。
  
  [...]
  
  d
  
  删除图案空间。开始下一个周期。
  
  [...]
  
  支持以下地址类型:
  
  数
  仅匹配指定的行号。


man sed

关于linux - 将函数的返回值保存在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53317319/

相关文章:

python - gunicorn 不在 supervisord 下工作(但自己工作)

用于学习的自定义 make 命令

linux - 如何在shell脚本中更改日期格式

linux - 将域列表添加到 apache 虚拟主机的 shell 脚本

c++ - 如何在派生类上使用初始值设定项列表?

linux - CMake:使用 MinGW 交叉编译 linux-to-windows 没有找到一些系统头文件

linux - Play2 IntelliJ 导致 akka.stream.BindFailedException$ : bind failed on Linux

regex - Bash中如何拆分、映射、加入?

linux - 脚本会在超过物理内存的95%时自动重启Tomcat

php - 运行 shell 脚本,然后从 PHP 显示文件的内容