我有以下代码:
#!/bin/bash
FILE=source.txt
RES=res.txt
VAR1=match
rm -f $RES
sudo cat $FILE | while IFS= read LINE; do
if [[ ! $(echo "$LINE" | grep $VAR1 ) ]]; then
echo -e "$LINE" >> $RES
else
NEW_LINE=$(awk '{gsub("'"${VAR1}"'", ""); print}' <<< $LINE)
echo -e "$NEW_LINE" | xargs >> $RES
fi
done
的Source.txt:
rob math
science match something
something match
hary math linux
执行代码后,我希望收到以下内容:
rob math
science something
something
hary math linux
但它删除了两个受影响的行中的空格。所以我最终得到以下结果:
rob math
science something
something
hary math linux
你能帮忙吗?
答案 0 :(得分:3)
除非您没有分享整个要求,否则您的所有代码都可以归结为function findTopicByID(id) {
let findedTopic = {};
let topics = obj.project.topics;
topics.map((topic) => {
if(parseInt(topic.id) === id) findedTopic = topic;
});
return findedTopic;
}
中的这一行,
Awk
我可以将匹配从awk '{gsub("match","",$0)}1' source.txt
rob math
science something
something
hary
变量配置为
bash
myVAR="match"
awk -v pat="${myVAR}" '{gsub(pat,"",$0)}1' source.txt
标记允许您将 -v
变量导入bash
的上下文。要完成写入新文件的答案,我会这样做
Awk
要回答你原来尝试吃掉白色空间的要求,需要注意几点,这句话
awk -v pat="${myVAR}" '{gsub(pat,"",$0)}1' source.txt > res.txt
如果你想保留你读过的每一行中的空格,是错误的,它应该被双引号为
awk '{gsub("'"${VAR1}"'", ""); print}' <<< $LINE
即使进行了这项更改,在写入文件之前您还有awk '{gsub("'"${VAR1}"'", ""); print}' <<<"$LINE"
(不确定原因)但您必须知道它从输入流中吞下空格。删除它应该可以解决您的问题。
假设您想要为这样一个简单的用例执行这样一个简单的脚本,语法上的正确方法(使用您的逻辑)将是,
xargs