我正在使用du -sh查看目录的大小。如果我检查一个 1KB 的目录,我会看到:
1.0K .
Run Code Online (Sandbox Code Playgroud)
但是,我想要以字节为单位的输出,并且只需要字节数。
例如:
$ du -sh .
1024
Run Code Online (Sandbox Code Playgroud) 因此,我在 macOS High Sierra 10.13.6 下使用 bash 3.2.57(1)-release,并尝试编写一个需要不区分大小写输入的 bash 脚本。我读到 usingtr "[:upper:]" "[:lower:]" <<< "$(echo AaBbCcDd)"会将整个字符串转换为小写,它确实如此。不过,我在其他地方读到过使用'[[:UPPER:]]'and'[[:LOWER:]]'代替。这些似乎仍然有效,但这让我想知道,这两者之间有什么区别吗?
在 bash 中,如果我运行
(foo=14)
Run Code Online (Sandbox Code Playgroud)
然后尝试稍后在我的 bash 脚本中引用该变量:
echo "${foo}"
Run Code Online (Sandbox Code Playgroud)
我什么也没得到。我怎样才能让 bash 按照我需要的方式存储这个变量?
具体来说,我在 if 语句中使用它并检查退出代码,类似于:
if (bar="$(foo=14;echo "${foo}"|tr '1' 'a' 2>&1)")
then
echo "Setting "'$bar'" was a success. It is ${bar}"
else
echo "Setting "'$bar'" failed with a nonzero exit code."
fi
Run Code Online (Sandbox Code Playgroud) 我有一个 .txt 文件,我想替换每一行第一次出现的匹配字符串。
例如,下面是 foo.txt 中的内容:
838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76 /Volumes/Documents - Part 1/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Volumes/Documents - Part 1/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - Part 1 BU/fedora linux.7z
f3d0ea2d775cf8edc1ddbd76e2562d3e4a2e281fe2aeb1333ef99536d1a180ee /Volumes/Documents - Part 1/manuals/dryer.pdf
\ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\{2}:`!*?$(){}[]<>|-=+% [meowzers] (1)~^^.$[E-frLOL[MAY[]{}()?<NUL>
\9c993445f7f6216b4fc7d35aef47afa16f4f831f2510b7fddd1e42c4cafb518c /Volumes/Documents - Part 1/Test Hash Folder/#;."'&,\\:`!CAT MEOW!!![hey]{15}(hello)@$%&^*(#@@*?$(){}[]<>|-=+% ~^^.$[E-frLOL[MAY[]{}()?<NUL>
Run Code Online (Sandbox Code Playgroud)
我要替换Documents - Part 1与Documents - Part 1 BU,但只有在每一行的第一次出现。
所以,它最终看起来像这样:
838dbc65cd79e16cf09f90abb928e3f3d0ea2d775cf8edc8acaabde6d393bc76 /Volumes/Documents - Part 1 BU/legos.png
415ccf1e05fb5985d2f719deabec7bb5d22aeaac7b82cca885010b12d483d997 /Volumes/Documents - Part 1 BU/folder/Volumes/Documents - Part 1/another folder/Volumes/Documents - …Run Code Online (Sandbox Code Playgroud) 我需要NOW()在 Postgres 11.5 中使用并需要获取如下所示的日期:
2019-10-07
Run Code Online (Sandbox Code Playgroud)
又名 YYYY-MM-DD 风格。我该怎么做呢?仅NOW()单独使用就给我带来了时间和一切的巨大字符串。
我试图tr -d从现有的字符串中删除一串字符,而不是删除其他地方的字符.
例如,我想从每个字符串的末尾tr删除.: OKfoo.txt
内容foo.txt:
BROKEN BONES: OK
Kefen Odvora: OK
BOOKS_FOR_MUM: OK
E: OK Amded: OK
Run Code Online (Sandbox Code Playgroud)
这是我运行的命令:
cat foo.txt | tr -d ": OK$"
Run Code Online (Sandbox Code Playgroud)
我希望它输出这个:
BROKEN BONES
Kefen Odvora
BOOKS_FOR_MUM
E: OK Amded
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了这个,我不想要:
BRENBNES
efendvora
BS_FR_MUM
EAmded
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
Mac OS X Yosemite,bash 3.2.57(1) - 发布
我试图删除文本字符串中除剩余 11 个字符之外的每个字符。字符串是Sample Text_that-would$normally~be,here--pe_-l4_mBY,我想要结束的只是-pe_-l4_mBY.
这是我尝试过的:
$ cat food
Sample Text_that-would$normally~be,here--pe_-l4_mBY
$ cat food | sed 's/^.*(.{3})$/\1/'
sed: 1: "s/^.*(.{3})$/\1/": \1 not defined in the RE
Run Code Online (Sandbox Code Playgroud)
请注意,文本字符串并没有真正存储在文件中,我只是用作cat food示例。
操作系统为 macOS High Sierra 10.13.6,bash版本为 3.2.57(1)-release