小编She*_*ish的帖子

从标准输入Bash逐行读取

我正在学习语言,考试曲目说:

它应该一次读取一个输入(来自标准输入)(每个条目是一个字符串,然后以换行符结束).

我的问题是两个:

  1. 如何从Bash中的标准输入逐行阅读?直到现在我用过,"read string"但我不认为它一次读取一行.

  2. 我不知道这是不是一个愚蠢的问题,但是一旦创建了脚本,我怎么能将更多行作为输入提供给脚本(当然从标准输入中读取).例如,从我插入两行(helloworld).我如何给bash脚本这两行?

unix bash stdin

8
推荐指数
2
解决办法
2万
查看次数

cat/dev/null到多个文件以清除日志等现有文件

一个清除日志的好方法(syslog有一个文件句柄)已经冻结我的linux服务器(空间不足)我试过 cat /dev/null > fileABC; cat /dev/null/ > fileXYZ

如何通过cat/dev/null将多个文件清除为高效或单个命令中的多个文件.

linux bash shell command-line tee

7
推荐指数
2
解决办法
7759
查看次数

通过 exec 在 find 的输出上替换 Bash 变量

有什么方法可以bashfind的输出应用变量替换吗?我知道我已经看到有人在堆栈溢出时这样做了,但我似乎再也找不到那个特定的帖子了。

例如,假设我想将文件重命名*.png*_copy.png. 我知道我可以使用rename它来做到这一点,但这只是一个思想实验。

现在我希望能够做这样的事情:

find . -name "*png" -exec mv "{}" "${{}%.*}_copy.png" \;
Run Code Online (Sandbox Code Playgroud)

这会导致无效替换。当然,我可以先将输出分配给一个变量,然后在子 shell 中应用替换,但这真的是唯一的方法吗?

find . -name "*.png" -exec bash -c 'var="{}";  mv "{}" "${var%.*}_copy.png"' \;
Run Code Online (Sandbox Code Playgroud)

或者有什么办法可以直接实现{}

共识

正如Etan Reisner所说,处理 find 输出的更好、更安全的方法是将其作为位置参数传递。

find . -name "*.png" -exec bash -c 'mv "$0" "${0%.*}_copy.png"' "{}" \;
Run Code Online (Sandbox Code Playgroud)

bash exec find built-in substitution

5
推荐指数
1
解决办法
1639
查看次数

shell脚本:通过搜索文件夹中的所有文件来查找字符串?

如何查找包含隐藏文件和子文件夹的文件夹(可能是多个)文件中包含的字符串?

我尝试了这个命令:

find . -maxdepth 1 -name "tes1t" -print0 | sed 's,\.\/,,g'
Run Code Online (Sandbox Code Playgroud)

但这并没有产生任何结果。

bash shell terminal scripting find

5
推荐指数
1
解决办法
5807
查看次数

AWK(意外的换行符或字符串结尾)

我正在尝试执行 bash 脚本,但我被卡住了。

数据

$ cat test.txt 
cat,command,for
cp,command,for
ls,command,to
Run Code Online (Sandbox Code Playgroud)

脚本

#!/bin/bash    

CUT_FILE=test.txt
TRN_GUID="1bcd1adf-2016-443b-9f00-2e4ce20726d7"
LCTN_ID="8002"
LCTN_NAME="TEST FILE"
LCTN_ADDR1="This is test"

cat $CUT_FILE | awk -F ','  '{ print  '$TRN_GUID','$LCTN_ID','$LCTN_NAME','$LCTN_ADDR1',$1,$2 }'
Run Code Online (Sandbox Code Playgroud)

输出

-bash-3.2# sh test4
awk: cmd. line:1: { print  1bcd1adf-2016-443b-9f00-2e4ce20726d7,8002,TEST
awk: cmd. line:1:                                                        ^ unexpected newline or end of string
Run Code Online (Sandbox Code Playgroud)

期望的输出

 1bcd1adf-2016-443b-9f00-2e4ce20726d7,8002,"TEST FILE","This is test",cat,command
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

shell awk

2
推荐指数
1
解决办法
2万
查看次数

mysqli_escape_string我该如何实现呢?

嗨,我对我写入数据库有疑问:

我是新手,mysql_escape_string因为朋友告诉我.因为我使用mysql_escape_string它不再写入我的数据库了.

这是代码:

////////////////////////////////////////////////////////////////
 $iets = $_POST['aantal'] + $_POST['begin'];

 for ($i = $_POST['begin'] ; $i < $iets ; $i++){
     $rows = $rows.'a'.$i.', ';
 }

 $rows = mysql_escape_string(trim($rows, ', '));
/////////////////////////////////////////////////////////////////////
 $iets = $_POST['aantal'] + $_POST['begin'];

 for ($i = $_POST['begin'] ; $i < $iets ; $i++){
     $r = 'a'.$i;
    $values = $values.'\''.$_POST[$r].'\', ';
 }

 $values = mysql_escape_string(trim($values, ', '));


$naam = mysql_escape_string($_POST['naam']);

mysql_query("INSERT INTO $naam
(
$rows
)
VALUES 
(
$values
)");
mysql_close($con);


printf("%s<br />%s", $values, $rows); …
Run Code Online (Sandbox Code Playgroud)

php mysql

0
推荐指数
1
解决办法
2139
查看次数

指针声明

指针声明char *(*a)[20];是什么意思?有什么区别char **a[20];

这两个声明是否相同?如果没有,区别是什么?

c pointers

0
推荐指数
1
解决办法
65
查看次数

标签 统计

bash ×4

shell ×3

find ×2

awk ×1

built-in ×1

c ×1

command-line ×1

exec ×1

linux ×1

mysql ×1

php ×1

pointers ×1

scripting ×1

stdin ×1

substitution ×1

tee ×1

terminal ×1

unix ×1