我正在尝试从我用以下bash脚本生成的文件列表中删除文件扩展名:
#!/bin/bash
file_list=$(find . -type f) #assuming that the files are stored in the same directory
trimmed_file_list=$(printf '%s\n' "${file_list[@]%.*}")
printf '%s\n' "${trimmed_file_list[@]}"
这个扩展会将扩展从列表中的最后一个条目中删除,但不会减少前面的任何一个条目
这不是一个真正的问题(虽然我最后有一个问题),而是一个问题的解决方案,我想要分享,以防它帮助别人。
在打开一个新的终端(特别是在OS上安装了bash完成宏端口的bash: [: too many arguments )时,我得到了很长时间的iTerm2。此错误起源于文件if [ -n "$BASH_VERSION" -a -n "$PS1" -a -z "$BASH_COMPLETION_COMPAT_DIR" ]; then中的行/opt/local/etc/bash_completion。我终于找到了这个问题,因为我的.bash_profil
我打算按说明设置mac终端快捷方式,但它不起作用。这是我所做的:
开放终端
nano .bash-profile
#add a few aliases
alias dtt = 'do this thing'
alias gc='git commit -m'
#save the bash profile
source ~/.bash_profile
之后,新的别名出现在bash文件中。然而,终端中没有自动完成功能,如果我输入dtt,它不会更改为“do this thing”。这条捷径似乎行不通。
有什么不对劲吗?谢谢
如何从bash中的键盘查找用户输入?我在想这样能行,
int b;
scanf("%d", &b);
但上面写着
-bash: /-bash/name/.-bash_profile:第17行:"%d",'
-bash: /Users/[name]/.bash\_profile: line 17:扫描意外令牌附近的语法错误(“%d”&b)
编辑
backdoor() {
printf "\nAccess backdoor Mr. Fletcher?\n\n"
read -r b
if (( b ==
我正在尝试做一个程序,它将读取一个数字,然后输出列表中该数字的每一个数字。然而,在我尝试第8和第9项之前,大多数事情看起来都很好。程序只输出\b \t。
如果输入数字包含8或9,同时也有其他数字,例如283,它将正常打印。否则,如果只有8或9,例如8、99,那么它将给出8和9的二进制表示(如果我记得正确的话)。
我的计划如下:
digitize(0)-> 0;
digitize(N) when N < 10 -> [N];
digitize(N) when N >= 10 -> digitize(N div 10)++[N rem 10].
学习Linux并使用unbuntu,并尝试使用.txt & tee -a选项将脚本附加到主目录中的一个tee文件中。该文件附加良好,脚本一直运行到第6行,在第6行中,它将生成一个"ls: until“"hos*':No此类文件或目录”&第8行,其消息为"wc: hostname: No此类文件或目录“。
#!/bin/bash
#Intro Script
cd /etc |& tee -a txt.
head -n 2 /etc/login.defs |& tee -a txt.
tail -n 2 /etc/login.defs
我有一条低音线路:
$ printf ' Number of xml files: %s\n' `find . -name '*.xml' | wc -l`
Number of xml files: 4
$
当我以这种方式从python运行它时,python解释器停止了,并且我的终端不再有stdout了,::
$ ls
input aa bb
$ python
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
>>>
>>> import subprocess
>>
我需要将一个文件读入数组中,并在每一行的末尾连接一个字符串。这是我的bash脚本:
#!/bin/bash
IFS=$'\n' read -d '' -r -a lines < ./file.list
for i in "${lines[@]}"
do
tmp="$i"
tmp="${tmp}stuff"
echo "$tmp"
done
但是,当我这样做时,会发生replace的操作,而不是连接。
例如,在file.list中,我们有:
http://www.exa
我有一个bash脚本,我想用它从数据库中提取IP地址。我似乎拿不到一美元。
命令是:./goto.sh 2010。
我想要它采取2010年和搜索数据库为它。
goto.sh:
#!/bin/bash
ip=`mysql -Ns wksips -e 'SELECT IP FROM ips WHERE ID LIKE '%'''$1''';`
echo $ip
我有%符号,因为所有单元都以wk开头,例如wks2010。
我尝试过更改引号,但在mysql中运行时仍然失败。
++ mysql -Ns wksips从ips中选择IP,其中
我希望在第一次出现“/”之后提取数据,直到行尾或“/”的下一个实例。
例如:
Test1 / Test 2 / Test 3
Test1 / Test2
Test 1 / Test2 / Test3
Test 1 / Test 2
将返回输出:
Test 2
Test2
Test2
Test 2
到目前为止,我已经提出了(?:^/\n+/\s){1}(.*?(?:$|\s/)),它返回结果():
Test 2 /
Test2
Test2 /
Test 2
我仍然在学习regex,并且很难弄清楚如何将“/”从结果的第1行和第3行中排除出来,因此对此的任何帮助或指导都将不胜感激。
我试图迭代目录中的每个文件和文件夹,并将文件名的一部分提取到变量中,但我无法使sed正确工作。我要么得到所有的文件名,要么一个也不知道。
脚本的这个版本应该捕获整个文件名:
#!/bin/bash
for f in *
do
substring=`echo $f | sed -E -n 's/(.*)/\1/'`
echo "sub: $substring"
done
但我却一无所获:
sub:
sub:
sub:
sub:
...
这个版本应该只给我文件名中的第一个字符:
#!/bin/bash
for f in *
do
substr
因此,我试图通过python套接字连接将参数传递给bash脚本。在bash中执行的脚本总是会弹出,即使当我打印传递给os.system()或subprocess.call()的变量时,它看起来是正确的。有什么想法吗?给我带来麻烦的代码中的一小部分。
while 1:
conn, addr = s.accept()
print 'Connected with ' + addr[0] + ':' + str(addr[1])
data = conn.recv(1024)
if not data:
break
我试图找出如何编写一个简单的正则表达式,只有当换行符出现在某些数据的开头或结尾时,才能突出显示换行符,同时保留换行符。
在下面的示例中,第1行和第14行都是新行。这是我试图突出显示在数据开头和结尾的唯一两行。
import regex as re
from colorama import Fore, Back
def red(s):
return Back.RED + s + Back.RESET
with open('/tmp/1.py', 'r') as f:
data = f.read()
print(
re.sub(r
我是如此的新手,抨击脚本,所以我错过了一些东西,但甚至无法想象什么是缺少的。前面的脚本在CentOS 5上运行良好,但是最近我切换到了Ubuntu 14.04 LTS,循环开始不像预期的那样工作了。以下是代码:
#!/bin/bash
for n in {10..99}
do
if ! ps aux | grep "ABC$n DEF " | grep -v grep
then
echo "Activating ABC$n DEF "
fi
done
如果我以./runMyScript.sh的形式运行脚本,它将按预期从10激活到99:
Activati
--我正在尝试从python向bash脚本传递参数。官方文档说你需要用逗号分隔,但我正在使用它,它不起作用。
subprocess.run(["/bin/bash test.sh", "hello", "dog", "3" ], shell=True)
在bash脚本中,我有以下基本代码:
echo "The number of arguments is: $#"
结果是:参数数为:0。
有什么建议吗?我决定把它作为一个字符串传递(不那么干净),在一个空格“”+“你好”+“狗”+“3”
致以敬意,
#!/bin/bash
show="ls -al /"
IFS=$'\n'
$show
结果就像bash: ls -al /: No such file or directory一样。
外壳程序无法返回预期结果。
如果我将IFS更改为$' \n' (注意,我添加了一个空格),就可以了。
我对IFS了解不多,有人能解释一下吗?