小编Tod*_*ly'的帖子

如果换行符是文件中的最后一个字符,如何删除换行符?

我有一些文件,如果它是文件中的最后一个字符,我想删除最后一个换行符. od -c告诉我,我运行的命令确实用一个尾随的新行写了一个文件:

0013600   n   t  >  \n
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些与sed的技巧,但我能想到的最好的不是诀窍:

sed -e '$s/\(.*\)\n$/\1/' abc
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点?

linux shell perl awk sed

154
推荐指数
10
解决办法
10万
查看次数

使用命令行将MediaWiki wikitext格式转换为HTML

我倾向于编写大量的文档,因此MediaWiki格式对我来说很容易理解,而且比编写传统HTML节省了我很多时间.然而,我也写了一篇博客,发现从键盘切换到鼠标一直为HTML输入正确的标签会增加很多时间.我希望能够用Mediawiki语法编写我的文章,然后将其转换为HTML以便在我的博客上使用.

我已经尝试了谷歌,但必须要求更好的术语,因为我无法找到任何东西.

我使用Linux,并希望从命令行执行此操作.

任何人有任何想法或想法?

html linux command-line mediawiki wikitext

9
推荐指数
3
解决办法
5192
查看次数

移动行以跟随文件中的另一行

我有一个文件在文件中有一行如下:

check=('78905905f5a4ed82160c327f3fd34cba')
Run Code Online (Sandbox Code Playgroud)

我希望能够移动此行以遵循如下所示的行:

files=('somefile.txt')
Run Code Online (Sandbox Code Playgroud)

该阵列虽然有时可以跨越多行,例如:

files=('somefile.txt'
       'file2.png'
       'another.txt'
       'andanother...')

text
in between

check=('78905905f5a4ed82160c327f3fd34cba'
       '5277a9164001a4276837b59dade26af2'
       '3f8b60b6fbb993c18442b62ea661aa6b')
Run Code Online (Sandbox Code Playgroud)

数组/行总是以a)结尾,其间没有文本将包含一个闭括号.

我得到一些建议,awk可以做到这一点:

awk '/files/{
    f=0
    print $0
    for(i=1;i<=d;i++){ print a[i]  }
    g=0
    delete a # remove array after found
    next
}
/check/{ f=1; g=1 }
f{ a[++d]=$0 }
!g' file
Run Code Online (Sandbox Code Playgroud)

这只会跨越一条线.我被告知要扩大搜索范围:

awk '/source/ && /\)$/{
    f=0
    print $0
    for(i=1;i<=d;i++){ print a[i]  }
    g=0
    delete a # remove array after found
    next
}
/md5sum/ && /\)$/{ f=1; g=1 }
f{ a[++d]=$0 }
!g'
Run Code Online (Sandbox Code Playgroud)

刚学习awk所以我很感激你的帮助.或者,如果有其他工具可以做到这一点,我想听听它.有人告诉我'ed'这些类型的功能.

linux awk

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

sed:查找两行以上的模式,而不是在该模式之后替换

哇,这个真的有我.我想在这里需要一些棘手的sed技能.这是我试图替换的命令文本的输出值:

...
fast
     n : abstaining from food
Run Code Online (Sandbox Code Playgroud)

我想要替换它的价值是:

...
Noun
 : abstaining from food
Run Code Online (Sandbox Code Playgroud)

事实证明这是我认为的诡计.因为'fast'被列出了很多次,因为它列在行的开头的其他地方.所以我想出了这个来定义范围:

sed '/fast/,/^     n : / s/fast/Noun/'
Run Code Online (Sandbox Code Playgroud)

我认为会这样做,但是......不幸的是,这并没有结束替换,这场比赛后的其余输出被Noun取代.比赛结束后如何让sed停止更换?更好的是,我可以找到两行模式匹配并替换它吗?

linux sed

3
推荐指数
1
解决办法
7459
查看次数

Bash:我如何截断数组?

我想改变一个数组的值,并希望得到任何帮助.

我有一个像这样的数组:

users=(root isometric akau)
Run Code Online (Sandbox Code Playgroud)

(这实际上是当前用户的列表)我希望能够测试用户是否存在以及他们是否存在,然后从数组中删除该人.我已经尝试过将它放在for循环中并进行评估:

for i in ${users[@]}; do
  eval "users=($([ -z $(grep \"^\$i\" /etc/shadow) ] && sed \"s/\$i//g\"))"
done

echo $users
Run Code Online (Sandbox Code Playgroud)

我想再玩这个,但我想我可能会变得太复杂(我不确定我可以把命令放在一个数组中).任何人都知道如何做到这一点?

编辑:

我如何输入数组变量未设置数:

cnt=0
for i in ${users[@]}; do
  [ -z "$(grep "^$i" /etc/shadow)" ] && unset users[cnt] || ((cnt++))
done
Run Code Online (Sandbox Code Playgroud)

EDIT2:

实际上丹尼斯的表现更好.

linux arrays bash

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

标签 统计

linux ×5

awk ×2

sed ×2

arrays ×1

bash ×1

command-line ×1

html ×1

mediawiki ×1

perl ×1

shell ×1

wikitext ×1