[英]Append a print statement to every line in a file with the previous line as output
在对重启崩溃进行故障排除时,我需要将文件中的每一行打印到输出控制台。 我要执行的是运行linux命令行或脚本以将文件中的每一行都包含在内,并在包含该行的打印语句之后放置一个print语句,例如:
while x<100
x=x+1
end while
会成为
while x<100
print "while x<100"
x=x+1
print "x=x+1"
end while
print "end while"
如果打印语句可以包含行号,那就更好了:
while x<100
print "Line 50: while x<100"
x=x+1
print "Line 52:x=x+1"
end while
print "Line 54: end while"
这里的想法是找到脚本中执行的最后一行,因为这可能是导致设备重启的那一行。 目前,我是手动执行此操作,添加所有这些行相当耗时。
我知道SED和AWK的存在,但从未使用过它们,尽管我确实经常使用ex / vi / grep / ls / wc在文本文件中进行分类,并且具有基本的Shell脚本编写经验。
编辑:请注意,我的问题中没有任何代码是Shell脚本。 我正在寻找有关创建Shell脚本或命令行来处理文件的帮助,以使文件中的每一行后面都包含一条包含前一行的打印语句。
awk '{printf("%s\nprint \"Line %s : %s\"\n",$0,++NR, $0)}' infile > outfile
while x<100
print "Line 2 : while x<100"
x=x+1
print "Line 4 : x=x+1"
end while
print "Line 6 : end while"
$0
是每行的内容, NR
是行/记录号。
对于已经有引号和打印语句的行,请使用以下修改后的awk
命令:
awk '{printf("%s\nprint \"Line %s : ",$0,++NR)} {gsub(/\"/,"\\\"");printf $0"\"\n"}' infile > outfile
好吧,基本的Bash Shell脚本是
while read -r line
do
echo "$line"
printf "print \"%q\"\n" "$line"
done
这仅使用bash内置函数,并打算放置在脚本文件中(在终端上键入该文件可能会使read
命令感到困惑)。 当前它从stdin接收输入,但是重定向操作符(例如command < file.txt
将解决此问题。
还要注意在对printf
的调用中使用了%q
格式说明符,它可以确保将结果输出传递回shell中以获取相同的文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.