- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我试图将一个文件的内容 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 到目标文件。
我该如何解决?
精度:
cat $file1 >> $file2
是为了处理需要 sudo 的情况,并通过根据需要添加换行符将 append 内容与已有内容分开。.
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'
最佳答案
如果文件 $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"; }
工作原理:
wc
计算文件 $1
中的字符数。od
每行产生一个字节hex dump两个文件,并使用 bash
ism,获得 diff
file ,通过管道传输到...rev
,然后 cut
2nd 字段,并对具有的连续行进行 uniq
计数空格而不是“>”。$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"
}
工作原理:
wc
获取文件长度,存储在$f1
和$f2
中。cmp
显示第一个文件已经 append 到第二个文件),然后使用 cat
将其 append 到第二个文件。否则返回
错误代码。关于狂欢 : Check if file contains other file contents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39530748/
这是一个 bash 脚本,它打印视频的帧率,它所采用的参数可能包含空格。这个参数也将在脚本内的命令中使用。 #!/bin/bash inputVid="$*" #checking if $inputV
OSX Snow Leopard 上的 Bash 脚本,我想删除一组文件后缀中的任何一个,但我的 googlefu 失败了。 给定 file="filename_1" file1=${file%_1}
您好,正在尝试按月和日对列表进行排序。弄不直。有什么指点吗? 列表示例: Jul 23 Drive :NTFS (Windows 31.6 GB/29.4 GiB) Details : Mounted
我正在写一个 bash 脚本 我的文件是这样的: file="${nodeID}_00000_19700101010${ts}_udp_filtered.pcap"。是否可以使用任何 5 位数字代替
我正在尝试通过 bash 代码将文件名传输到 eog。 这是我的代码:ls | grep“ sample ” | head -1 其中 sample 是所需文件的名称。 我无法弄清楚如何将输出通过管道
我是 bash 的新手,我正在尝试编写一个 bash 脚本来保存用户的输入(一些标签),以帮助这个用户我想允许仅根据我个人的预定义标签列表完成而不是关于常见的TAB文件补全(文件夹中的文件名)。 pr
我有一个看起来像这样的字符串/foo/bar/baz59_ 5stuff.thing 如果最后一个数字(示例中的 5)大于另一个变量,我想将其增加一个。 9 将增加到 10。请注意,最后一个数字也可以
我可以用任何其他语言来做到这一点,但是对于 Bash,我四处寻找,却找不到答案。 我需要在脚本中手动增加 $line。示例: for line in `cat file` do foo()
我正在尝试剪切一个字符串,直到它成为第一个指定的字符。在这种情况下,它是第一个拉丁字母。 我厌倦了这个。它有点管用,但有时会移动 1 个或多个字符。 f=$(echo $f | tail -c $((
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 9 年前。 要求提供代码的问题必须表现出对所解决问题的最低限度的理解。包括尝试过的解决方案、为什么
我在名为 file.txt 的文件中有类似的内容 AA.201610.pancake.Paul AA.201610.hello.Robert A.201610.hello.Mark 现在,我只获得
我有这个脚本可以生成 8-16 之间的随机字符。我对如何从银行 [! @ # $ % ^ & * ( ) _ + ] 这个字符串中的任意位置? if [ $# -eq 0 ] then
我有以下 bash 脚本: 1 #!/bin/bash 2 query='query= SELECT * WHERE { ?s ?p ?o } LIMIT 5' 3 cmd="curl $
我正在尝试创建一个安装后 bash 脚本,我可以在全新安装 Ubuntu 时使用它。我想要的第一个功能是让脚本提示用户他们是否想更新他们的系统,如果他们选择是,则显示单词“正在加载”,后面跟着一个点循
我尝试使用 bash 脚本访问特定路径,但我的终端无法访问它。这是我非常简单的脚本: #!/bin/bash init() { cd $PATH ls -l } PATH="/Volu
以下命令通过递归搜索当前目录和所有子目录找到所有出现的“some string” grep -r -n 'some string' . 此命令递归搜索当前目录和所有子目录并返回 *.axvw 格式的
我想让我的一部分代码更有效率。我正在考虑让它分成多个进程并让它们一次执行 50/100 次,而不是一次。 例如(伪): for line in file; do foo; foo2; foo3; do
假设我有字符串“Memory Used: 19.54M”我如何从中提取 19.54?19.54 会经常变化,所以我需要将它存储在一个变量中,并与下一次迭代的值进行比较。 我想我需要 grep 和 re
我有一个简单的 bash 脚本如下 #!/bin/bash sleep 5000 当我尝试执行它时,出现了一个奇怪的错误 : No such file or directory 注意分号:。所有常见的
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我是一名优秀的程序员,十分优秀!