[英]bash script: find content in file between specific lines and run command on content, replace old content with the output of command
[英]Transform file content to an specific output in bash
我是 bash 脚本的新手,我正在尝试转换一个文件:
结果需要是一个正确分隔行的处理文件(一组元素/列的行),删除随机跳转。
我的第一个方法是使用
variable=$(cat $1)
tr -d "\n" $variable > $variable
然后虽然通过字符读取字符寻找','与计数器,并在找到它们的每组数字后添加一行跳转。 尝试执行此操作时,我找到了有关while IFS= read
并尝试了以下操作:
while IFS=, read -r col1 col2 col3 col4 <<< $variable; do
echo "$col1" "$col2" "$col3" "$col4" '\n'
done
我显然在那里遗漏了一些东西(我什至相信while循环应该已经删除了行跳转,请纠正我)而且我不知道如何继续下去。 我不是在寻找可以完成这项工作的一堆代码,而是试图在这里找到可以为我指明正确方向的人(也许我不了解 IFS,或者我需要在该步骤之前处理一些事情......不管它是什么)。
提前致谢。
编辑:我删除了我在 echo 中添加的行跳转,它现在打印 col1 col2 col3 col4 并且永远不会结束,所以我显然无法在打印之前将文件中的每个元素链接到变量。
而不是echo "$col1" "$col2" "$col3" "$col4" '\\n'
只写这个
echo -e "$col1 $col2 $col3 $col4 \n"
实际上问题不在于shell
,而是echo
命令本身,以及变量插值周围缺少双引号。 您可以尝试使用echo -e
但并非所有平台都支持它,这也是现在推荐printf
以实现可移植性的原因之一。
您还可以尝试将换行符直接插入到您的 shell 脚本中(如果您正在编写脚本),它看起来像...
#!/bin/sh
echo "this is for
test"
#EOF
或等效地
#!/bin/sh
string="this is for
test"
echo "$string"
# note double quotes!
祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.