gpt4 book ai didi

狂欢 : Check if file contains other file contents

转载 作者:行者123 更新时间:2023-12-05 02:20:20 24 4
gpt4 key购买 nike

所以我试图将一个文件的内容 append 到另一个文件,如果它还没有包含的话。这是我尝试的方式:

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 中。那是没有按预期工作的部分:
当我在同一个文件上运行两次时,它只会将相同的文本两次 append 到目标文件。

我该如何解决?


精度:

  • 我使用的是 OSX 10.11.5(但适用于 Linux/跨平台的解决方案也可能对我在家或阅读本文的其他人都适用)
  • 我选择使用 catAndAppend 而不是 cat $file1 >> $file2 是为了处理需要 sudo 的情况,并通过根据需要添加换行符将 append 内容与已有内容分开。
  • 如果文件 $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'
  • 但我需要将它与其他包含 var 导出、代码、命令、配置以及基本上任何类型的文本的文件一起使用

最佳答案

如果文件 $1 位于文件 $2 中的任何地方,则不要追加:

catAndAppendIfMissing(){
f1=$(wc -c < "$1")
diff -y <(od -An -tx1 -w1 -v "$1") <(od -An -tx1 -w1 -v "$2") | \
rev | cut -f2 | uniq -c | grep -v '[>|]' | numgrep /${f1}../ | \
grep -q -m1 '.+*' || cat "$1" >> "$2"; }

工作原理:

  1. 使用 wc 计算文件 $1 中的字符数。
  2. 使用od 每行产生一个字节hex dump两个文件,并使用 bashism,获得 diff file ,通过管道传输到...
  3. rev,然后 cut 2nd 字段,并对具有的连续行进行 uniq 计数空格而不是“>”。
  4. 如果其中一个计数等于或大于 $f1,则可以追加。这可以用变量来检查,但是 numgrep很方便,有助于避免变量。

注释。好:也适用于二进制文件。不好:效率低下,od 读取了两个文件的全部,而 diff 读取了 od 的全部输出。如果 file1 是一个单行字符串,它位于 1TB file2 的第一行,将会浪费很多时间。


(旧版本)。如果文件 $1 已 append 到文件 $2,则不要 append :

catAndAppendIfMissing(){
f1=$(wc -c < "$1")
f2=$(wc -c < "$2")
[ $f1 -le $f2 ] && cmp -s "$1" "$2" 0 $(( $f2 - $f1 )) && return 1
cat "$1" >> "$2"
}

工作原理:

  1. 使用wc获取文件长度,存储在$f1$f2中。
  2. 如果第一个文件比第二个文件长,(或者如果比第二个文件短,如果 cmp 显示第一个文件已经 append 到第二个文件),然后使用 cat 将其 append 到第二个文件。否则返回错误代码。

关于狂欢 : Check if file contains other file contents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39530748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com