我需要计算ls
转储directory_listing_file
中每行的一个字符串(路径文件)的md5sum:
./r/g4/f1.JPG
./r/g4/f2.JPG
./r/g4/f3.JPG
./r/g4/f4.JPG
但是应该在没有初始点的情况下计算md5sum。 我写了一个简单的脚本:
while read line
do
echo $line | exec 'md5sum'
done
./g.sh < directory_listnitg.txt
如何从每行中删除第一个点?
答案 0 :(得分:43)
myString="${myString:1}"
从myString的字符编号1开始(字符0是最左边的字符)返回字符串的剩余部分。 “s允许字符串中的空格。有关该方面的更多信息,请查看$ IFS。
答案 1 :(得分:19)
您可以将其传送到
cut -c2-
哪个给你
while read line
do
echo $line | cut -c2- | md5sum
done
./g.sh < directory_listnitg.txt
答案 2 :(得分:4)
你可以这样做:
% sh -c `sed 's@^.\(.*\)@md5sum \1@' <./dirlist.txt`
真的,我想你可以提高效率,但我不知道是什么产生你的清单。如果您可以pipe
,或者通过heredoc
运行该命令以保持其输出正常,那么您可以完成整个流程的工作。
修改强>
好的,你说这是来自“ls dump”。嗯,这里有点灵活:
% ls_dump() {
> sed 's@^.\(.*\)$@md5sum \1@' <<_EOF_ | sh -s
>> `ls ${@}`
>> _EOF_
> }
% ls_dump -all -args -you /would/normally/give/ls
<desired output>
我认为这总共只调用一个子shell。它应该是相当不错的,但在我看来,find ... -exec md5sum {} ... +
可能更安全,更快,而且你所需要的只是。
<强> EDIT2:强>
好的,现在我将回答这个问题。要删除任何POSIX兼容shell中字符串的第一个字符,您只需要查看参数扩展,如:
${string#?}
-Mike
答案 3 :(得分:3)
使用sed的不同方法,它具有可以处理不以点开头的输入的好处。此外,您不会遇到echo
在输出中附加换行符的问题,这会导致md5sum报告虚假结果。
#!/bin/bash
while read line
do
echo -n $line | sed 's/^.//' | md5sum
done < input
比较这些:
$ echo "a" | md5sum
60b725f10c9c85c70d97880dfe8191b3 -
$ echo -n "a" | md5sum
0cc175b9c0f1b6a831c399e269772661 -
答案 4 :(得分:3)
从行或字符串中删除前n个字符
#method1)使用bash
str="price: 9832.3"
echo "${str:7}"
#method2)使用剪切
str="price: 9832.3"
cut -c8- <<< $str
#method3)使用sed
str="price: 9832.3"
cut -c8- <<< $str
#method4)使用awk
str="price: 9832.3"
awk '{gsub(/^.{7}/,"");}1' <<< $str
答案 5 :(得分:2)
将字段分隔符设置为路径分隔符,并将除第一个斜杠之前的内容之外的所有内容读入$name
:
while IFS=/ read junk name
do
echo $name
done < directory_listing.txt
答案 6 :(得分:1)
有一个非常简单的方法可以实现这一目标:
假设我们不需要变量中的前缀“ i-”
$ ROLE_TAG=role
$ INSTANCE_ID=i-123456789
您只需要添加'#'+ [your_exclusion_pattern],例如:
$ MYHOSTNAME="${ROLE_TAG}-${INSTANCE_ID#i-}"
$ echo $MYHOSTNAME
role-123456789
答案 7 :(得分:1)
或者这样
myString="${myString/.}"
在Ubuntu 18.04.4 LTS,bash 4.4.20上进行测试:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
$ echo $BASH_VERSION
4.4.20(1)-release
$ myString="./r/g4/f1.JPG"
$ myString="${myString/.}"
$ echo $myString
/r/g4/f1.JPG