在对重新启动崩溃进行故障排除时,我需要将文件中的每一行打印到输出控制台。我想要做的是运行一个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脚本或命令行来处理文件的帮助,以便文件中的每一行后跟一个包含前一行的print语句。
答案 0 :(得分:2)
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
是行/记录号。
对于已经有引号和print语句的行,请使用以下修改后的awk
命令:
awk '{printf("%s\nprint \"Line %s : ",$0,++NR)} {gsub(/\"/,"\\\"");printf $0"\"\n"}' infile > outfile
答案 1 :(得分:1)
好吧,基本的Bash shell脚本将是
while read -r line
do
echo "$line"
printf "print \"%q\"\n" "$line"
done
这只使用bash builtins,并且意味着放在脚本文件中(在终端输入它可能会混淆read
命令)。它目前从stdin获取输入,但是command < file.txt
之类的重定向操作符将修复它。
还要注意在%q
的调用中使用printf
格式说明符,它确保可以将结果输出传递回shell以获取相同的文本。< / p>