我想将一个文件的内容追加到另外一个文件中,如果该内容尚未包含在其中。下面是我的尝试:
catAndAppendIfMissing(){
[[ ! -s $2 ]] && touch "$2" || [[ ! -s $2 ]] && sudo touch "$2"
if grep $1 $2; then
echo "found"
else
catAndAppend $1 $2 #this appends file $1 contents to file $2 (and takes care of adding newlines if needed and uses sudo if needed, thus the separate function)
fi
}
使用
if grep $1 $2
,我试图查看文件$1的内容是否出现在文件$2中。那就是不按预期工作的部分:当我在同一个文件上运行两次时,它将简单地两次将相同的文本附加到目标文件中。
如何解决这个问题?
准化:
- 我正在使用OSX 10.11.5(但Linux / 跨平台的解决方案对于我在家中或其他人阅读此文都可能相关)
- 我选择使用catAndAppend而不是
cat $file1 >> $file2
来处理需要sudo的情况,并通过需要添加换行符来将附加的内容与已有内容分开。 - 如果文件$1出现在文件$2中的任何位置(不仅仅是开头或结尾),我不希望进行追加操作。
- 作为信息,以下是我对之一的文件$1内容尝试:
alias ls='ls -a'
alias mkdir="mkdir -pv"
alias wget="wget -c"
alias histg="history | grep"
alias echopath='echo $PATH | tr -s ":" "\n"'
alias myip="curl -sSL http://ipecho.net/plain | xargs echo"
alias webpic="mogrify -resize 690\> *.png"
alias cddog='cd ~/dev/go/src/github.com/dogtools/dog'
alias xp='cd ~/dev/go/src/experiments'
- 但我需要将其与包含变量导出、代码、命令、配置或任何类型的文本的其他文件一起使用
cat $1
$2'。 - Ronak PatelcatAndAppend
?cat "$1" >> "$2"
?catAndAppend
?cat "$1" >> "$2"
? - Andreas LouvcatAndAppend
与permission denied
文件一起工作,并在追加内容后添加换行符,以适应将来对同一文件的追加操作。这就是为什么我使用自定义的方法而不是cat "$1" >> "$2"
。 - Nicolas Marshallif grep cat $1 $2
仍然失败(它总是进入else
分支并追加文件已经包含的内容)。 - Nicolas Marshallgrep
命令吗?在担心其他东西之前先让它在命令行中正常工作。Grep 通常使用单词/短语/正则表达式作为搜索目标,不会尝试打开file1
并获取其中的所有“单词”。您可以尝试调整comm
的输出以查看两个文件是否相同。祝你好运。 - shellter