我制作了一个脚本,用户输入了一系列字母
我在我的剧本中写了这个循环:
#variable that contains the alphabet"
Alphabet="abcdefghijklmnopqrstuvwxyz"
#the user input
Input1=$1
#the length of the string the user inputs
lengthAlphabetInput=${#1}
for position in `seq 1 $lengthAlphabetInput`
do
letterAtPositionLength=$(($lengthAlphabetInput-$position))
letterAtPosition=$(echo "${Input1:$letterAtPositionLength:1}")
alphabetAtPositionLength=$(($lengthAlphabetInput-$position))
alphabetAtPosition=$(echo "${Alphabet:$alphabetAtPositionLength:1}")
sed "s/$alphabetAtPosition/$letterAtPosition/g" file.txt
done
我预计如果用户输入 ./script.sh xyz
它会改变每一个
但是它只用x取代每个a。由于某种原因,它会跳过其余部分。
任何人都可以帮助我吗?
答案 0 :(得分:1)
您的 /**
* Display the form and Handle it
* Not route needed
*/
public function newAction(Request $request, Products $product)
{
$em = $this->getDoctrine()->getManager();
$message = new MessageMap();
$form = $this->createCreateForm($message);
$product = $em->getRepository('ApxDevUsersBundle:Products')->find($product);
$form->handleRequest($request);
$user = $this->get('security.token_storage')->getToken()->getUser();
if($form->isValid())
{
$data = $form->getData();
//var_dump($data);die; (not work)
$product = $em->getRepository('ApxDevUsersBundle:Products')->find($product);
if($user->isGranted('ROLE_USER'))
{
$message->setFromID($user->getUserInfo());
}else{
$message->setEmail($data->get('email'));
}
$message->setToID($product->getUserInfo());
$em->persist($message);
$em->flush();
$x = $product->getCity();
$city = $em->getRepository('ApxDevPagesBundle:City')->findOneby(array('libelle' => trim($x)));
$this->get('session')->getFlashBag()->add('warning', $this->get('translator')->trans('product.create_first'));
return $this->redirect($this->generateUrl('home_show', array('entity' => $product, 'city' => $city)));
}
return $this->render('ApxDevMessageBundle:Message:modules/email.html.twig', array(
'form' => $form->createView(),
));
}
命令未将结果保存在任何位置,只需将其打印到sed
即可。如果你有GNU sed,你可以使用stdout
标志来修改文件。 E.g:
-i
否则您可以将结果写入临时文件并将其复制回来:
sed -i "s/$alphabetAtPosition/$letterAtPosition/g" file.txt
其他版本的tmp_file=$(mktemp)
sed "s/$alphabetAtPosition/$letterAtPosition/g" file.txt > "$tmp_file"
mv -f "$tmp_file" file.txt
可能与sed
具有相似的标记,因此请查看您的手册页以获取本地选项。
答案 1 :(得分:1)
您的脚本将受益于y
的{{1}}命令,该命令完全符合您的要求:
sed
引用man page:
y/source/dest/ Transliterate the characters in the pattern space which appear in source to the corresponding character in dest.
以下是您在脚本中使用$ echo abcdef > a
$ sed 'y/abc/xyz/' a
xyzdef
的方法:
sed y
请注意此解决方案如何不需要循环,只读取/写入文件一次。