bash 和 -bash 有什么区别。当我执行时echo $0,它会bash在一台机器和-bash另一台机器上返回。它们之间有什么区别?
我有一个文件文件夹,我想在第 5 个位置更改其中一个字符的大小写。
由此:
ABC-xyz
DEF-xyz
GHI-xys
Run Code Online (Sandbox Code Playgroud)
对此:
ABC-Xyz
DEF-Xyz
GHI-Xys
Run Code Online (Sandbox Code Playgroud)
您会注意到 X 已转换为大写。
任何想法我如何在 Bash 中做到这一点?
grep . filename.txt
Run Code Online (Sandbox Code Playgroud)
这只会返回 filename.txt 中的所有内容,因为 . 是代表任何字符的正则表达式。如何使用 grep 搜索句点或其他正则表达式,例如 *?
当我尝试使用 Mutt 发送电子邮件时,我被卡住了,但是每次我运行脚本时,它都会提示一个带有验证的菜单。有什么方法可以绕过该验证或从脚本中输入选项而无需问什么?
#! /bin/bash
zip -r files.zip /home/user/folder/*.*
mutt -s "files[CONFIDENTIAL]" -a files.zip -- mail@mail.com
rm files.zip**strong text**
Run Code Online (Sandbox Code Playgroud) 我有一个文件夹“foo”,其中包含很多子文件夹,例如
foo
|---20101
|---20102
|---20103
|---20111
|---20112
|---20113
Run Code Online (Sandbox Code Playgroud)
还有更多的方式,但希望它能解释这个场景。我现在想将此文件夹中以“2011”开头的所有文件夹复制到名为“bar”的“foo”的同级中。但是,'bar' 已经包含一些同名的文件夹
bar
|---20111
|---20113
|---20114
Run Code Online (Sandbox Code Playgroud)
源文件夹和目标文件夹的内容应该合并。请注意,该脚本还需要创建一个 bar/20112 文件夹,因为该文件夹不存在。
我是 Mac 终端脚本的新手,并已成功地 grep 正确的文件夹
foo>ls | grep ^2011
Run Code Online (Sandbox Code Playgroud)
其中列出了正确的文件夹,但我不知道如何将其传递给适当的复制操作。
我有一个由以下组成的目录结构:
iTunes/Music/${author}/${album}/${song.mp3}
Run Code Online (Sandbox Code Playgroud)
我实现了一个脚本,使用 lame 将我的 mp3 比特率剥离到 128 kbps(它同时适用于单个文件)。
我的“normalize_mp3.sh”如下所示:
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in *.mp3
do
lame --cbr $f __out.mp3
mv __out.mp3 $f
done
IFS=$SAVEIFS
Run Code Online (Sandbox Code Playgroud)
如果我一个文件夹一个文件夹并执行这个命令,这很好用,但我想要一个“全局”命令,比如在 4DOS 中,所以我可以运行:
$ cd iTunes/Music
$ global normalize_mp3.sh
Run Code Online (Sandbox Code Playgroud)
并且该global命令将遍历所有子目录并执行normalize_mp3.sh删除所有子文件夹中的所有 mp3。
有谁知道是否有与 4DOSglobal命令等效的 Unix ?我试着玩,find -exec但我只是头疼。
如何恢复这些文件?
我用过:mv ./*/*当它应该是mv ./*/* .现在我所有的文件都不见了。
有时您正在处理包含空格的文件和文件夹。问题是任何时候您尝试将包含空格的文件/文件夹通过管道传输到另一个命令行程序时,包含空格的文件/文件夹都会被解释为单独的参数而不是单个参数。例如,考虑以下目录树:
Folder With Spaces
Folder With Spaces/FolderWithoutSpaces
Folder With Spaces/FolderWithoutSpaces/file with spaces.txt
FolderWithoutSpaces
FolderWithoutSpaces/fileWithoutSpaces.txt
Run Code Online (Sandbox Code Playgroud)
如果您尝试运行诸如“grep 'some text' $(find . -type f)”之类的 shell 命令,您将获得以下输出:
grep: ./Folder: No such file or directory
grep: With: No such file or directory
grep: Spaces/FolderWithoutSpaces/file: No such file or directory
grep: with: No such file or directory
grep: spaces.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)
最大的问题是,您如何将包含空格的文件/文件夹作为命令行程序的参数进行管道传输?
我相信我们大多数人都知道,当我们希望某些正则表达式与行首的字符串匹配时,我们必须使用“^”...
但是,我试图理解“行首为空字符串”的真正含义
我知道 echo "Hello World" | grep ^H 它匹配
所以请看一下这些命令的输出:
[sergio@localhost ~]$ dd if=/dev/zero of=/tmp/texto count=1 bs=1 2>/dev/null
[sergio@localhost ~]$ od -ta /tmp/texto
0000000 nul
0000001
Run Code Online (Sandbox Code Playgroud)
到目前为止一切都如预期,所以:
[sergio@localhost ~]$ echo "Hello" >> /tmp/texto
[sergio@localhost ~]$ grep -a "^Hello" /tmp/texto
Run Code Online (Sandbox Code Playgroud)
好吧,我必须承认的第一件事没有预料到,在 Hello 之前有一个空字符,为什么它不匹配?
好的,让我们以 perl 风格使用 grep:
[sergio@localhost ~]$ grep -a -P "\x00Hello" /tmp/texto
Hello
Run Code Online (Sandbox Code Playgroud)
好的,它匹配
但是我不明白(也许我有一些误解)为什么 grep -a "^Hello" 不匹配......
你可以帮帮我吗?
提前致谢!
测试是内置的 shell 还是实际的程序?
bruce@Bruce:~$ type -a test
test is a shell builtin
test is /usr/bin/test
bruce@Bruce:~$
bruce@Bruce:~$ file /usr/bin/test
/usr/bin/test: ELF 64-bit LSB executable
bruce@Bruce:~$
Run Code Online (Sandbox Code Playgroud)
我的系统运行的是 Ubuntu 13.04 和 BASH 4.2.45(1)-release。