删除文本文件中特定位置之前的所有内容

删除文本文件中特定位置之前的所有内容

我有文件“report.csv”。该报告是根据几个参数生成的
,范围从 1 到 10。因此,report.csv 首先打印了所有参数
,然后是主标题和数据。现在我需要
使用标题和数据处理该文件并排除所有参数。该文件如下所示:

para_1: abc
para_2: def
para_3: ghi
.
.
.
para_n: xyz

Customer_Name, Customer_Number, .....
Jon Doe,19923
Adam Plak,19985
.
.
.

我使用下面的命令来获取列标题的位置

这给了我这个位置

grep -n "Customer_Name" report.csv | cut -d : -f1

(比方说)13。然后我使用此命令复制到另一个文件并使用新文件

sed '1,13d' report.csv >> report_test.csv

不过我需要让它变得动态,比如

$var1 = grep -n "Customer_Name" report.csv | cut -d : -f1
$var2 = d
sed '1,$var1$var2' report.csv >> report_test.csv

各位专家可以帮助在 Shell 脚本中实现这一点吗?

答案1

var1=`grep -n "Customer_Name" report.csv | cut -d : -f1`
var2='d'
sed "1,${var1}${var2}"  report.csv  >> report_test.csv

或者

var1=$(grep -n "Customer_Name" report.csv | cut -d : -f1)
var2='d'
sed "1,${var1}${var2}"  report.csv  >> report_test.csv

解释

我们这里需要的是命令替换

命令替换可以通过两种方式完成,一种是使用

  • $(...)
  • ``...``

命令替换的目的是评估放在反引号内的命令,并将其结果作为实际命令的参数提供。

两种命令替换方式的区别

旧式反引号 ` ` 处理反斜杠和嵌套的方式有点不同。新式 $() 将 ( ) 之间的所有内容解释为命令。新式 $() 适用于所有符合 POSIX 的 shell。

这些是更好地理解命令替换的好读物:

相关内容